尝试真正“获取”端点合约:
我理解提供不同的端点来支持不同的绑定(bind),但是什么时候可以为一项服务定义 n 个端点,并使用不同的合约?似乎在大多数情况下(除了 IMetadataExchange),无论协议(protocol)如何,端点契约(Contract)都是相同的,不是吗?
如果大多数时候所有端点上的契约都是相同的,那么在父服务而不是每个端点上定义服务契约会不会太简单了(为什么?)(看起来很麻烦/重复),同时允许在需要时覆盖端点(例如:IMetadataExchange)。
感谢您帮助解决让我彻夜难眠的小问题;-)
最佳答案
好的,好吧 - 您在 <service>
中定义的服务标记是实际的实现代码 - 构成服务的实际 C# 或 VB.NET 行。因此,它是一个具体类(甚至可能实现多个服务契约)。这只是服务器端的。
然而,端点是服务器和客户端之间的通信 channel ,在这两者之间,您希望仅共享合约 - 从不该契约(Contract)的任何具体实现。该端点仅用于单个服务合约 - 如果您的具体服务实现多个合约,您需要向客户端公开多个端点以提供所有这些功能。
这是否让事情变得更清晰了一些?
关于WCF:为什么合约在端点上而不是在服务上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11894450/