0

我有一个使用类的 WCF 服务

namespace MyService
{
    [DataContract]
    public class SomeResponse
    {
        [DataMember]
        public System.Drawing.Rectangle BoundingBox { get; set; }
    }
}

在客户端,当我尝试访问BoundingBox矩形时,矩形将其命名空间从 更改System.Drawing.RectangleMyServiceReference.Rectangle. 我希望 WCF 框架足够聪明,能够意识到 System.Drawing.Rectangle 也存在于客户端并因此使用正确的命名空间。是否可以告诉服务这样做?

4

1 回答 1

1

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

在您的情况下,您可能希望将其转换System.Drawing.RectangleMyServiceReference.Rectangle. 但是,WCF 通过检查属性中的“在所有引用的程序集中重用类型”选项提供了对此的内置支持:

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

为避免此问题,默认情况下,引用程序集中的类型是共享的。如果要禁用一个或多个程序集的类型共享,可以在“配置服务引用”对话框中执行此操作。

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

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

于 2013-07-10T13:26:48.887 回答