假设我在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接口)。我的端点中的此合同属性是否必须?如果是这样,我很想知道原因。
答案 0 :(得分:0)
至少部分是因为我的类EmployeeService不限于实现单个服务合同接口。假设我指定了一个新的合同ISuperContract.cs:
namespace MultipleEndpointSample
{
[ServiceContract]
interface ISuperService
{
[OperationContract]
void GetEmployeeName();
}
}
然后我的Web.config:endpoint定义中的contract-attribute是非常必要的,我现在用它来区分EmployeeService的WHICH子服务(它实现了两个服务),这个端点将满足。