如何共享一个WCF服务和客户端之间的对象?(How do I share an object bet

2019-09-16 20:58发布

我有一个分布式系统三个程序依赖于WCF服务进行通信。 如果我在WCF服务库使用的数据类型,我如何访问它从已经引用的服务的客户端?

我能够实例从客户端控制台应用程序的WCF服务定义的对象,虽然并没有太多别的我可以用它做。 我无法访问任何对象的成员方法或字段。

例如,我有一个是在服务库和客户端使用该交易对象类:

[DataContract]
public class Transaction
{
    public int checkoutID;
    public DateTime time;
    public List<object> products;
    public double totalPrice;
    public bool complete;

    [OperationBehavior]
    public void Start(int ID)
    {
        checkoutID = ID;
        products = new List<object>();
        complete = false;
    }

    [OperationBehavior]
    public void Complete()
    {
        time = DateTime.Now;
        complete = true;
    }
}

这是从对于其中另一个类中定义的服务(IService),称为CompositeType中的接口文件中取出。 我在想什么? 我认为WCF服务允许的方法和数据类型的远程处理?

由于任何人谁可以帮助,我一直有与WCF了一段时间的问题。

Answer 1:

WCF是一个消息传递系统-所有的客户端和服务器共享是服务合同 (例如,服务的方法和数据类型的使用的结构)。

善有善报在客户端和服务器之间的导线基本上是你的数据契约对象的XML序列化表示形式。 但是,WCF是默认不共享代码-只有合同(如不是数据类型/类,只有他们的XML表示)。

所以在默认情况下,当客户端给定服务创建一个客户端代理,它就能确定服务方法和传递数据来回的XML形状 - 并根据这些信息,它会创建客户端有电线上完全相同的XML表示数据类 - 但它们是不同的.NET类(在客户端命名空间)。

如果你控制通信的两端-在服务器和客户端-无一不是使用.NET,你可以这样做:

  • 把你的服务和数据合同到一个单独的组件( YourService.Contracts或类似的东西)

  • 让服务器端代码引用,组件和使用它的接口和类型

  • 创建客户端代理之前 ,参考添加到共享合同组件

  • 在这种情况下,当您创建客户端代理(使用Add Service Referencesvcutil命令行工具),WCF运行时将检测到它知道已经所需的类型(因为这些都在共享组件定义),和它会重复使用 ,而不是创建新的客户端仅数据类的那些共享的类型



Answer 2:

我不能完全明白你的问题,但是从上面的代码粘贴,您共享与WCF客户端的方法,而不是域/属性。 你需要在领域应用[数据成员]属性为好。



Answer 3:

在[数据成员]标记添加到域 - 他们是序列化即可。

此外,[OperationContract的]应该是方法,而不是[OperationBehavior]



文章来源: How do I share an object between a WCF service and a client?