WCF服务Wsdl错误:操作引用已导出的消息元素

WCF服务Wsdl错误:操作引用已导出的消息元素,wcf,wsdl,messagecontract,Wcf,Wsdl,Messagecontract,我们有一个WCF服务,它有两个具有相同消息约定的操作(操作1和操作2)。当您访问Wsdl(Get/Http)时,我们会收到以下错误: System.InvalidOperationException:调用WSDL导出扩展时引发异常:System.ServiceModel.Description.DataContractSerializeRopection行为 合同编号:Xxxxx--> System.InvalidOperationException:Xxxx.IServiceInterfac

我们有一个WCF服务,它有两个具有相同消息约定的操作(操作1和操作2)。当您访问Wsdl(Get/Http)时,我们会收到以下错误:


System.InvalidOperationException:调用WSDL导出扩展时引发异常:System.ServiceModel.Description.DataContractSerializeRopection行为

合同编号:Xxxxx--> System.InvalidOperationException:Xxxx.IServiceInterface.Operation1操作 引用消息元素[http://schemas.somecompany.com/namespace/version/:MessageContract]已从Xxxx.IServiceInterface.Operation2操作导出的

通过更改方法名称或使用OperationContractAttribute的name属性,可以更改其中一个操作的名称。或者,您可以使用MessageContract编程模型更详细地控制元素名称


在我看来,为不同的服务操作重用相同的消息应该是可能的。我理解错误中给出的解决方案,但我们希望在许多不同的操作中得到相同的消息

想法


更多信息:我们实现了一个事件发布/订阅机制。事件订阅者使用他们想要处理的事件类型声明服务操作,并将其包装在通用消息协定类中。这个通用消息类使用消息代码属性来使用事件发布者xml名称,这是一个单一的消息结构。所有事件订阅服务器都在UDDI中注册,发布/订阅机制使用这些端点将事件推送到订阅服务器。在UDDI中注册服务操作会检测特定的事件命名空间,以将这些服务操作注册为事件处理程序(而不是req/响应操作)。

如果您已复制粘贴操作1,然后将名称更改为操作2,但未更改DataContract属性以匹配新名称,则会发生此错误

是的,如果是这样的话,我会理解的。不幸的是,操作1和2都是唯一的(在代码和xml中都是唯一的)。塔克斯。