WCF-指定服务名称和合同类型的冗余?

时间:2016-12-10 23:33:13

标签: c# wcf

假设我在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接口)。我的端点中的此合同属性是否必须?如果是这样,我很想知道原因。

1 个答案:

答案 0 :(得分:0)

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

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

然后我的Web.config:endpoint定义中的contract-attribute是非常必要的,我现在用它来区分EmployeeService的WHICH子服务(它实现了两个服务),这个端点将满足。