我有一个使用类
的WCF服务namespace MyService
{
[DataContract]
public class SomeResponse
{
[DataMember]
public System.Drawing.Rectangle BoundingBox { get; set; }
}
}
在客户端,当我尝试访问BoundingBox
矩形时,Rectangle将其命名空间从System.Drawing.Rectangle
更改为MyServiceReference.Rectangle
。
我希望WCF框架足够聪明,以便意识到System.Drawing.Rectangle也存在于客户端,因此使用正确的命名空间。是否有可能告诉服务这样做?
答案 0 :(得分:1)
这里的主要问题是WCF使用SOAP来发送/接收数据,这些数据不直接连接到.net,而是一个开放的Web标准。例如。 java客户端也可能使用数据,因此对System.Drawing.Rectangle
命名空间一无所知。但是,它可以使用Web服务定义语言中提供的Rectangle并将其映射到java Rectangle结构。
在您的情况下,您可能希望将System.Drawing.Rectangle
转换为MyServiceReference.Rectangle
。但是,WCF通过检查属性中的“Reuse types in all referenced assemblies”选项为此提供内置支持:
将服务引用添加到项目时,将定义任何类型 该服务在本地项目中生成。在很多情况下,这个 在服务使用通用.NET Framework时创建重复类型 类型或在共享库中定义类型时。
要避免此问题,引用的程序集中的类型将共享 默认。如果要禁用一个或多个类型共享 程序集,您可以在“配置服务引用”对话框中执行此操作 框。
此link提供了有关如何启用/使用此功能的示例。
最后,确保在客户端应用程序中引用了所有正确的程序集。如果没有引用它,它显然不能被WCF重用。