Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从接口定义中分离wcf服务契约有什么价值吗?_Wcf_Contracts - Fatal编程技术网

从接口定义中分离wcf服务契约有什么价值吗?

从接口定义中分离wcf服务契约有什么价值吗?,wcf,contracts,Wcf,Contracts,我有一个接口ICCustomerService: public interface ICustomerService { CustomerList FindAll(); } 以及实现该接口的具体类。现在我需要使用wcf/rest在web上公开该方法,并且我必须将接口定义更改为: [ServiceContract] public interface ICustomerService { [OperationContract] [WebInvoke( Method = "GET

我有一个接口ICCustomerService:

public interface ICustomerService
{

  CustomerList FindAll();
}
以及实现该接口的具体类。现在我需要使用wcf/rest在web上公开该方法,并且我必须将接口定义更改为:

[ServiceContract]
public interface ICustomerService
{
  [OperationContract]
  [WebInvoke(
   Method = "GET",
   UriTemplate = "Customers")]
  CustomerList FindAll();
}

我的问题是,如果有客户端希望使用dll引用而不是RESTAPI来使用实现,那么将这些属性附加到接口是否有任何不利之处?我知道使用REST的缺点,比如必须将参数作为类型字符串,如果它在uri中。

除了代码可读性(如果您的客户端必须查看您的接口源代码),属性应该没有任何缺点

任何感兴趣的人(如WCF框架)都可以读取这些属性,也可以忽略这些属性。实际上,它们在任何实现类中都不可见(请参阅)

在体系结构层面,考虑使用2个接口,一个用于引用客户端的DLL,另一个用于其余客户端。它们可能一开始就很相似,甚至可能共享相同的基本接口和实现,但如果业务案例需要,您可以让它们相互转移。


此外,这使您可以在WCF web应用程序项目中保留WCF属性填充的接口,并在核心类库项目中保留干净的接口和实现。

除了代码可读性(如果您的客户端必须查看接口源代码),这些属性不应有任何缺点

任何感兴趣的人(如WCF框架)都可以读取这些属性,也可以忽略这些属性。实际上,它们在任何实现类中都不可见(请参阅)

在体系结构层面,考虑使用2个接口,一个用于引用客户端的DLL,另一个用于其余客户端。它们可能一开始就很相似,甚至可能共享相同的基本接口和实现,但如果业务案例需要,您可以让它们相互转移。
此外,这使您可以在WCF web应用程序项目中保留WCF属性填充接口,并在核心类库项目中保留干净的接口和实现