我能否对公开我的业务对象的复杂 WCF 服务进行一些澄清。假设我有 4 个对象:contact
, organisation
, project
和 letter
.
是创建我的服务的最佳方式:
非常感谢,
克里斯
最佳答案
根据Interface Segregation Principle ,你可能想考虑把这些东西分开。
一种典型的方法是每个对象类型有一个接口(interface)(例如一个“服务”) - 例如。 Contact
的一个接口(interface)具有联系人等所需和有用的所有操作。
当然,您可能还拥有处理多种不同类型对象的方法——将这些方法放在特定的服务契约(Contract)中有点棘手。
此外,使用 WCF,您可以轻松拥有一个服务实现类,然后一次实现多个这些接口(interface) - 例如使用通用代码或通用模式。
但我想重新考虑您的服务契约(Contract)并将其转换为更小、更易于管理的 block 是一个好主意。
更新:
如果你的服务实现类实现了四个服务契约,那么你必须像这样配置它:
<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>
现在,您的每项服务都可以在特定端点上使用:
IContractService
可通过 http://YourServer/MyServices/Contact
联系ILetterService
可通过 http://YourServer/MyServices/Letter
联系等等....
对于这些地址中的每一个,您现在可以添加来自客户端的服务引用 - 仅添加您真正需要的那些。一个应用程序可能只需要其中一项服务,另一个可能需要两个或三个等。
关于WCF 多重契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6476158/