【问题标题】:WCF- redundancy in specifying service name and contract type?WCF-指定服务名称和合同类型的冗余?
【发布时间】:2016-12-11 07:45:27
【问题描述】:

假设我在 IEmployService.cs 中指定了服务合同:

namespace MyNamespace {
    [ServiceContract]
    public interface IEmployeeService {
      /* ... */
    }
}

还有一个EmployeeService.svc中的实现文件:

namespace MyNamespace {
   public class EmployeeService: IEmployeeService {
       /* implements IEmployeeService fully */    
   }
}

现在,当我在 Web.config 文件中指定端点时,我看到每个人都这样做:

<system.serviceModel>
<services>
  <service name="MyNamespace.EmployeeService">
    <endpoint
      address="basic1"
      binding="basicHttpBinding"
      contract="MyNamespace.IEmployeeService"
      ></endpoint>
  </service>
</services>
<!-- other tags -->
<system.serviceModel>

WCF 似乎不需要指定contract="MyNamespace.IEmployeeService" 就能推断出合同类型是什么,因为它已经引用了 EmployeeService(它实现了指定服务合同的 IEmployeeService 接口)。我的端点中的这个合同属性是绝对必要的吗?如果是这样,我很想知道为什么。

【问题讨论】:

  • 这个合同属性是否是必要的,因为 EmployeeService 可能会实现 MULTIPLE 合同?我可以看到这是必要的。

标签: c# wcf


【解决方案1】:

这至少部分是因为我的 EmployeeService 类不限于实现单个服务合同接口。假设我指定了一个新合同 ISuperContract.cs:

namespace MultipleEndpointSample
{
    [ServiceContract]
    interface ISuperService
    {
        [OperationContract]
        void GetEmployeeName();
    }
}

那么我的 Web.config: 端点定义中的 contract-attribute 是非常必要的,我现在用它来区分 EmployeeService 的哪个子服务(实现两个服务),这个端点将迎合。

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多