Bah*_*haa 4 .net c# wcf datacontract servicecontract
在WCF服务中,是否可以在ServiceContract定义中包含数据成员?做这样的事情:
namespace My.Service.Contracts
{
[ServiceContract]
public interface IMyService
{
[OperationContract]
ResultObject[] Search(SearchParams searchParams);
[DataMember]
MyCustomClass MyDataMember { get; }
}
}
Run Code Online (Sandbox Code Playgroud)
我可以MyDataMember从ServiceContract内部公开吗?场景将如下所示:实现服务契约的以下类具有我想使用公共字段/属性公开的成员数据.看起来像这样的东西:我试图在实现服务合同的类中公开一个字段/属性.例如:
public class MyService : IMyService
{
private MyCustomClass _datafield;
ResultObject[] Search(SearchParams searchParams){
//Do the search
}
MyCustomClass MyDataMember {
get: { return _dataField; }
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以在ServiceContract定义中包含数据成员?
虽然编译器很乐意让您"添加" [DataMember]服务接口所装饰的属性,但任何WCF客户端都不会看到该属性.
因此,如果您的服务接口定义为:
[ServiceContract]
public interface IMyService
{
[OperationContract]
ResultObject[] Search(SearchParams searchParams);
[DataMember]
MyCustomClass MyDataMember { get; }
}
Run Code Online (Sandbox Code Playgroud)
...并且说你通过添加服务参考生成客户端代理,你会看到没有提到MyDataMember:
请注意,在添加服务引用时,您也不会看到任何属性.
向服务接口添加属性没有意义,添加也没有意义[DataMember].您添加[DataMember]到[DataContract]服务界面中装饰和引用的类.
MSDN对数据合同有这样的说法:
数据协定是服务和客户之间的正式协议,它抽象地描述要交换的数据.也就是说,为了进行通信,客户端和服务不必共享相同的类型,只需要相同的数据合同.对于每个参数或返回类型,数据协定精确定义了要交换的序列化(转换为XML)的数据.- Golly,告诉我更多......
WCF基本上都是关于调用方法的(实际上它更多的是创建一个统一的通信API,将RPC作为免费的牛排刀组).通常通过向服务发送SOAP消息来调用方法(尽管它也可以是REST).消息具有用于装饰的属性,[DataMember]以指示属性应序列化并包含在消息流中.还有,[MessageContract]但我们不会去那里.
无论如何,一个人不会访问WCF服务上的"属性",而是调用一个方法.
要了解有关WCF史诗的更多信息,请查看以下链接.底部甚至有一个相当不错的例子:
| 归档时间: |
|
| 查看次数: |
1289 次 |
| 最近记录: |