0

在将我的 Web 服务访问到 Web 浏览器时,我遇到了一种奇怪的行为,并且在生成时会导致异常。

这是我的场景:

  1. 访问网页:http://localhost:10100/WCFService1.svc?wsdl

  2. 访问网页:http://localhost:10100/WCFService2.svc?wsdl

问题是 WCFService2.svc WSDL 的输出包含与 WCFService2 合并的 WCFService1 的所有定义。

此外,当我访问另一个包含与先前生成的 WSDL 同名的方法的 WSDL 时,我得到了这个异常(肯定是因为我的 WSDL 正在合并在一起)。

我还注意到合同的名称有点奇怪,服务名称前有“:”:http://MyCompany.ca/: IWCFService3

有人知道“WSDL 导出扩展”是怎么回事吗?


可能由 IncludeExceptionDetailInFaults=true 创建的 ExceptionDetail,其值为:
System.InvalidOperationException:在调用 WSDL 导出扩展时引发异常:
System.ServiceModel.Description.DataContractSerializerOperationBehavior 合同: http://MyCompany.ca/: IWCFService3
----> System.InvalidOperationException:MyCompany.IWCFService3.Import 操作引用已从 MyCompany.IWCFService2.Import 操作导出的消息元素 [http://MyCompany.ca/:Import]。您可以通过更改方法名称或使用 OperationContractAttribute 的 Name 属性来更改其中一项操作的名称。或者,您可以使用 MessageContract 编程模型更详细地控制元素名称。在 System.ServiceModel.Description.MessageContractExporter.AddElementToSchema(XmlSchemaElement 元素,字符串 elementNs,XmlSchemaSet schemaSet)在 System.ServiceModel.Description.MessageContractExporter.ExportWrappedPart(消息消息,字符串 elementName,字符串 elementNs,XmlSchemaSet schemaSet,

4

1 回答 1

2

我发现了我的问题:我们有大量的 Web 服务,并且我们只有一个 System.ServiceModel.Description.ServiceMetadataBehavior 实例,我们在所有服务之间共享它。为每个服务创建一个新的 ServiceMetadataBehavior 实例解决了这个问题。

于 2011-01-07T19:17:50.473 回答