.NET WCF服务中的属性

时间:2009-10-01 20:44:39

标签: .net wcf web-services

我在使用WCF服务中的属性时遇到问题。我可以在界面中定义一个属性:

[ServiceContract(Namespace = "http://some-url.com/")]
interface ISomeInterface
{
  [OperationContract]
  int SomeMethod(string someArg);

  int SomeProperty
  {
    [OperationContract]
    get;
  }
}

但是当客户端使用时,属性的基础方法get_SomeProperty()被公开,而不是作为getter属性。有没有办法告诉客户将其视为财产? (或者我必须放弃在服务合同中使用属性吗?)

4 个答案:

答案 0 :(得分:4)

世界上任何地方都没有SOAP Web服务支持属性。无法在WSDL中描述属性。 Web服务仅与操作(方法)有关。

答案 1 :(得分:3)

在WCF中,您所能做的就是在客户端和服务器之间发送消息。

客户端永远不会对服务器对象进行直接的rpc样式访问 - 因此,您无法表面属性或类似的东西。

您所能做的就是序列化邮件并将其发送到方法[OperationContract]。我相信这不适用于属性的setter方法。

马克

答案 2 :(得分:1)

Web服务不公开属性。它只暴露了客户端可以调用的方法(Web服务是无状态的......所以具有属性实际上没有意义,因为它们始终是初始值)。

答案 3 :(得分:1)

使用DataMember属性。

[DataMember]
int SomeProperty
{
   get;
}

您必须确保您的对象可序列化。

这将为您的对象创建一个复杂类型,并添加一个像这样的元素......

<xs:element minOccurs="0" name="SomeProperty" type="xs:int" />