WCF多份合同

如何解决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
{
   ...
}
如果不添加这些属性,则无法为公共服务实现的每个合同添加单独的服务引用。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?