检索WCF服务公开的数据的模式?
是否有任何通过WCF服务公开数据的建议模式?我使用的是netTCP,所以WCF数据服务已经推出。我有几个方法通常都是重载的,但由于WCF不支持重载,我不得不不断想出富有想象力的名称,或者在各种服务契约之间移动方法。比如说检索WCF服务公开的数据的模式?,wcf,design-patterns,Wcf,Design Patterns,是否有任何通过WCF服务公开数据的建议模式?我使用的是netTCP,所以WCF数据服务已经推出。我有几个方法通常都是重载的,但由于WCF不支持重载,我不得不不断想出富有想象力的名称,或者在各种服务契约之间移动方法。比如说 [ServiceContract] public interface IFooService { [ServiceOperation] List<Foo> GetFoos (); [ServiceOperation] List&l
[ServiceContract]
public interface IFooService
{
[ServiceOperation]
List<Foo> GetFoos ();
[ServiceOperation]
List<Foo> GetFoosByBar (int barId);
[ServiceOperation]
List<Foo> GetFoosByBarByBaz (int barId, int baz);
[ServiceOperation]
List<Foo> GetFoosByBarByBazByQux (int bardId, int baz, string qux);
}
[服务合同]
公共接口iFoosService
{
[服务操作]
列出GetFoos();
[服务操作]
列出GetFoosByBar(int-barId);
[服务操作]
列出GetFoosByBaz(int barId、int baz);
[服务操作]
列出getfoosbybazbyqux(int-bardId,int-baz,string-qux);
}
我更希望有一个GetFoos方法。实践是创造这样的东西吗
[ServiceContract]
public interface IFooService
{
[ServiceOperation]
List<Foo> GetFoos(FooRequest request);
}
[DataContract]
public FooRequest
{
[DataMember]
public int? BarId {get;set}
[DataMemeber]
public int? BazId {get;set}
[DataMember]
public string Qux {get;set}
}
[服务合同]
公共接口iFoosService
{
[服务操作]
列出GetFoos(FooRequest请求);
}
[数据合同]
公共食品请求
{
[数据成员]
公共int?BarId{get;set}
[DataMemeber]
公共int?BazId{get;set}
[数据成员]
公共字符串Qux{get;set}
}
您只有两个选项
没有正确的答案-这是主观的,取决于您喜欢什么以及您希望api的外观。我不同意第一个选项。WCF在消息方面工作,因此强烈建议设计基于消息的契约。从灵活性和可版本性的角度来看,这要方便得多。以下是几个现实生活中的例子:
- 映射。有很多很好的映射工具。就我个人而言,我发现它们也非常有用。您可能希望创建一个查询对象,该对象被传递到存储库以查询数据。配置从DTO到查询对象的映射要比映射一组方法参数容易得多
- 编码。您可能希望使用验证、日志等属性来修饰服务方法参数。只要想象一下,如果你按照过程的方式去做的话,你的方法定义会是什么样子
- 通常,除了其他数据外,您还必须返回ErrorCode和ErrorMessage(如果适用)。如果你有一个基类,这是很容易做到的。包含这些属性和所有响应类的ResponseBase继承此属性
- 还有很多其他的
MethodResponse GetData(MethodRequest request);
在大多数情况下,响应和请求对象也有基类。在处理WCF管线中的对象时,这会简化工作
请注意,在WCF中,基本上有两种方式两种基于设计消息的契约。数据合同和。使用MessageContract,您可以更好地控制您的消息
最后,如果你不相信我,看看最广泛的网络服务是如何设计的:亚马逊、Facebook、Azure等等。它们都是基于消息的
一篇关于这个主题的好文章-
希望有帮助 第二个选择是好的