在WCF中传递DataContracts上的属性

时间:2009-07-22 08:24:25

标签: wcf attributes datacontract

我有一个具有重要属性的datacontract。 例如,在以下代码中:

[DataMember]
[Description("My Description")]
public string Name { get; set; }

我希望在客户端代理上自动生成Description属性。

除了大规模重复之外,还有其他解决方案或解决方法吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

你没有,不是真的。请记住,您没有传递对象的实例,而是传递文本消息。

如果真的很重要,那么你可以放弃生成的代理类并分享数据对象和契约的实现,但是这需要更多的工作,当然你冒着客户端和服务器失效的风险同步。

如果您想尝试,然后将您的合同和操作界面放入一个单独的程序集,使用公共修饰符,请尝试以下

Binding binding = new BasicHttpBinding(); // or which one you 
EndpointAddress endpoint = 
    new EndpointAddress("endpointUrl");
ChannelFactory<IServiceInterface> channelFactory = 
    new ChannelFactory<IServiceInterface>(binding, endpoint);

IServiceInterface client = channelFactory.CreateChannel();
MyDataType result = client.Operation(myOtherDataType);

((IClientChannel)client).Close();

答案 1 :(得分:0)

您可能需要深入研究服务描述(以及生成的WSDL文件)的创建,以便以客户端可以检测并重新创建它们的形式传递这些属性。接下来是不可能的,真的。

另外:请记住,WCF旨在实现互操作性 - Java或PHP客户端应该如何处理这些属性呢?

面向服务的编程与“常规”基于组件或对象的系统完全不同。您所做的只是以文本或二进制格式传递消息。这确实限制了在处理基于.NET的对象和组件时可能习惯的某些事情 - 它在SOA世界中的工作方式不同。

马克