如何在WCF上传递System.Drawing.Rectangle

本文关键字:System Drawing Rectangle WCF | 更新日期: 2023-09-27 18:21:59

我有一个使用类的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,并相应地使用正确的命名空间。有可能告诉服务部门这样做吗?

如何在WCF上传递System.Drawing.Rectangle

这里的主要问题是WCF使用SOAP发送/接收数据,该数据不是直接连接到.net,而是一个开放的web标准。例如,java客户端也可能使用数据,因此对System.Drawing.Rectangle命名空间一无所知。然而,它可以使用Web服务定义语言中提供的矩形,并将其映射到java矩形结构。

在您的情况下,您可能希望将System.Drawing.Rectangle强制转换为MyServiceReference.Rectangle。然而,WCF通过检查属性中的"在所有引用的程序集中重用类型"选项提供了内置的支持:

将服务引用添加到项目中时,中定义的任何类型服务是在本地项目中生成的。在许多情况下当服务使用通用.NET Framework时,会创建重复的类型类型或在共享库中定义类型时。

为了避免此问题,引用程序集中的类型由共享违约如果要禁用一个或多个类型共享程序集,可以在"配置服务引用"对话框中执行此操作盒

此链接提供了有关如何启用/使用此功能的示例。

最后,确保在客户端应用程序中引用了所有正确的程序集。如果它没有被引用,WCF显然不能重用它。