WCF多份合同

问题描述

| 我能否对公开我的业务对象的复杂WCF服务进行一些说明。假设我有4个对象:
contact
organisation
project
letter
。 是创建我的服务的最佳方法: 制作4个合约作为“服务对象”,并将对象和预期的操作作为“服务对象”中的值/参数传递?要么 为所有对象及其功能(可能很多)创建合同? 非常感谢, 克里斯     

解决方法

        根据接口隔离原则,您可能需要考虑将这些内容拆分。 一种典型的方法是每个对象类型具有一个接口(例如一个“服务”)。一个用于
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>
现在,您的每个服务都可以在特定端点上使用: 您的ѭ6at可以达到
http://YourServer/MyServices/Contact
您的ѭ8at可以达到
http://YourServer/MyServices/Letter
等等.... 对于这些地址中的每一个,您现在都可以从客户端添加服务引用-仅添加您真正需要的地址。一个应用可能仅需要其中一项服务,另一应用可能需要两项或三项服务。     ,        只是为了添加Marc的非常有帮助的答案,需要对界面进行如下装饰,然后才有机会为服务分别实现的每个合同添加独立的引用。
[ServiceContract(Name=\"Contact\",Namespace=\"YourNamespace.IContactService\")]
public interface IContractService
{
   ...
}
对于其他接口类似
[ServiceContract(Name=\"Letter\",Namespace=\"YourNamespace.ILetterService\")]
public interface ILetterService
{
   ...
}
如果不添加这些属性,则无法为公共服务实现的每个合同添加单独的服务引用。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...