WCF多重合同

Chr*_*ach 4 architecture wcf

我可以对一个暴露我的业务对象的复杂WCF服务做一些澄清.比方说,我有4个对象:contact,organisation,projectletter.

是创建我的服务的最佳方式:

  1. 将4个合约作为"服务对象",并将对象和目标操作作为值/参数传递给"服务对象"?要么
  2. 为所有对象及其功能(可能很多)创建合同?

非常感谢,

克里斯

mar*_*c_s 8

根据接口隔离原则,您可能想要考虑拆分这些东西.

一种典型的方法是每个对象类型具有一个接口(例如,一个"服务") - 例如,一个接口用于Contact具有所需的所有操作并且对于联系人等有用.

当然,您可能还有处理多种不同类型对象的方法 - 这些方法在特定服务合同中有点棘手.

此外,使用WCF,您可以轻松地拥有单个服务实现类,然后一次又实现多个这些接口 - 例如,使用公共代码或常见模式.

但我想重新考虑您的服务合同并将其转换为更小,更易于管理的块是个好主意.

更新:

如果您的服务实现类实现了四个服务契约,那么您必须像这样配置它:

<services>
  <service name="YourNamespace.YourServiceImplementation">
     <host>
        <baseAddresses>
            <add baseAddress="http://YourServer/MyServices/" />
        </baseAddresses>
     </host>
     <endpoint name="Contact"
         address="Contact"
         binding="basicHttpBinding"
         contract="YourNamespace.IContactService" />
     <endpoint name="Letter"
         address="Letter"
         binding="basicHttpBinding"
         contract="YourNamespace.ILetterService" />
     <endpoint name="Organisation"
         address="Organisation"
         binding="basicHttpBinding"
         contract="YourNamespace.IOrganisationService" />
     <endpoint name="Project"
         address="Project"
         binding="basicHttpBinding"
         contract="YourNamespace.IProjectService" />
     <endpoint name="mex"
         address="mex"
         binding="mexHttpBinding" 
         contract="IMetadataExchange" />
  </service>
</services>
Run Code Online (Sandbox Code Playgroud)

现在,您的每项服务都可在特定端点使用:

  • IContractService可以到达http://YourServer/MyServices/Contact
  • ILetterService可以到达http://YourServer/MyServices/Letter

等等....

对于每个地址,您现在可以从客户端添加服务引用 - 仅添加您真正需要的服务引用.一个应用程序可能只需要一个服务,另一个可能需要两个或三个等.