我们有一个 WCF 服务,它有两个具有相同消息协定的操作(Operation1 和 Operation2)。当您访问 Wsdl (Get/Http) 时,我们会收到此错误:
System.InvalidOperationException:调用 WSDL 导出扩展时引发异常:System.ServiceModel.Description.DataContractSerializerOperationBehavior
contract: Xxxxx ----> System.InvalidOperationException: Xxxx.IServiceInterface.Operation1 操作引用了已经从 Xxxx 导出的消息元素 [http://schemas.somecompany.com/namespace/version/:MessageContract]。 IServiceInterface.Operation2 操作。
您可以通过更改方法名称或使用 OperationContractAttribute 的 Name 属性来更改其中一项操作的名称。或者,您可以使用 MessageContract 编程模型更详细地控制元素名称。
在我看来,应该可以为不同的服务操作重用相同的消息。我了解错误中给出的解决方案,但我们希望为许多不同的操作提供相同的消息。
想法?
更多信息:我们实现了事件发布/订阅机制。事件订阅者使用他们想要处理的事件类型声明服务操作,并将其包装在通用消息合同类中。这个通用消息类使用消息代码属性来使用事件发布者 xml 名称 - 这是一个单一的消息结构。所有事件订阅者都在 UDDI 中注册,并且发布/订阅机制使用这些端点将事件推送给订阅者。在 UDDI 中注册服务操作会检测特定的事件名称空间以将这些服务操作注册为事件处理程序(而不是请求/响应操作)。