Lee*_*Lee 2 .net service wcf remoting
我在分布式系统中有三个程序,它们依赖于WCF服务进行通信.如果我在WCF服务库中使用了数据类型,如何从引用该服务的客户端访问它?
我能够从客户端控制台应用程序实例化WCF服务中定义的对象,尽管我无法用它做很多事情.我无法访问任何对象的成员方法或字段.
例如,我有这个在服务库和客户端中使用的Transaction对象类:
[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;
}
}
Run Code Online (Sandbox Code Playgroud)
这取自服务(IService)的接口文件,其中定义了另一个类,称为CompositeType.我错过了什么?我认为WCF服务允许远程处理方法和数据类型?
感谢任何可以提供帮助的人,我一直遇到WCF问题.
WCF是一个消息传递系统 - 所有客户端和服务器共享是服务契约(例如服务方法和使用的数据类型的结构).
客户端和服务器之间的连接基本上是数据协定对象的XML序列化表示.但是WCF默认不共享代码 - 仅合同(例如,不是数据类型/类,只是它们的XML表示).
因此,默认情况下,当客户端为给定服务创建客户端代理时,它将能够确定服务方法和来回传递的数据的XML形状 - 并且基于该信息,它将创建客户端在线上具有完全相同的XML表示的数据类 - 但它们是不同的.NET类(在客户端名称空间中).
如果你控制通信的两端 - 服务器和客户端 - 并且都使用.NET,你可以这样做:
将您的服务和数据合同放入一个单独的程序集(YourService.Contracts或类似的东西)
让服务器端代码引用该程序集并使用其接口和类型
在创建客户端代理之前,添加对该共享契约程序集的引用
在这种情况下,当您创建客户端代理(使用Add Service Reference或svcutil命令行工具)时,WCF运行时将检测到它已知道已经需要的类型(因为这些是在共享程序集中定义的),并且它将重用这些共享类型而不是仅创建新的客户端数据类.
| 归档时间: |
|
| 查看次数: |
4757 次 |
| 最近记录: |