编程语言
首页 > 编程语言> > c# – 我可以在WCF ServiceContract中公开数据成员吗?

c# – 我可以在WCF ServiceContract中公开数据成员吗?

作者:互联网

在WCF服务中,是否可以在ServiceContract定义中包含数据成员?做这样的事情:

namespace My.Service.Contracts
{
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        ResultObject[] Search(SearchParams searchParams);

        [DataMember]
        MyCustomClass MyDataMember { get; }
    }
}

我可以从ServiceContract中公开MyDataMember吗?场景将如下所示:实现服务契约的以下类具有我想使用公共字段/属性公开的成员数据.看起来像这样的东西:
    我正在尝试在实现服务合同的类中公开字段/属性.例如:

public class MyService : IMyService
{
    private MyCustomClass _datafield;

    ResultObject[] Search(SearchParams searchParams){
        //Do the search
    }

    MyCustomClass MyDataMember {
      get: { return _dataField; }
    }
}

解决方法:

is it possible to include a data member inside a ServiceContract definition?

虽然编译器很乐意让您将[DataMember]修饰的属性“添加”到服务接口,但任何WCF客户端都不会看到该属性.

因此,如果您的服务接口定义为:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    ResultObject[] Search(SearchParams searchParams);

    [DataMember]
    MyCustomClass MyDataMember { get; }
}

…并且说你通过添加服务引用生成客户端代理,你会看到没有提到MyDataMember:

enter image description here

请注意,在添加服务引用时,您也不会看到任何属性.

enter image description here

向服务接口添加属性没有意义,添加[DataMember]也没有意义.将[DataMember]添加到用[DataContract]修饰的类中,并在服务的界面中引用.

MSDN对数据合同有这样的说法:

A data contract is a formal agreement between a service and a client that abstractly describes the data to be exchanged. That is, to communicate, the client and the service do not have to share the same types, only the same data contracts. A data contract precisely defines, for each parameter or return type, what data is serialized (turned into XML) to be exchanged. – 07002

WCF基本上都是关于调用方法的(实际上它更多的是创建一个统一的通信API,将RPC作为免费的牛排刀组).通常通过向服务发送SOAP消息来调用方法(尽管它也可以是REST).消息具有使用[DataMember]修饰的属性,以指示属性应序列化并包含在消息流中.还有[MessageContract],但我们不会去那里.

无论如何,一个人不会访问WCF服务上的“属性”,而是调用一个方法.

告诉我更多

要了解有关WCF史诗的更多信息,请查看以下链接.底部甚至有一个相当不错的例子:

> MSDN,“Using Data Contracts

标签:c,net,wcf,datacontract,servicecontract
来源: https://codeday.me/bug/20190528/1167731.html