访问我的WCF服务的WSDL时出错:“...操作引用已从...导出的消息元素...”

时间:2011-01-07 16:09:49

标签: wcf wsdl mex

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

以下是我的情景:

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

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

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

    此外,当我访问另一个包含与先前生成的WSDL具有相同名称的方法的WSDL时,我得到了这个异常(当然因为我的WSDL被合并在一起)。

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

    有人知道“WSDL导出扩展”会发生什么?


      

    ExceptionDetail,可能由。创建   IncludeExceptionDetailInFaults = TRUE,   其价值是:
      System.InvalidOperationException:在对a的调用中抛出异常   WSDL导出扩展:
      System.ServiceModel.Description.DataContractSerializerOperationBehavior   合同:http://MyCompany.ca/:IWCFService3
      ----> System.InvalidOperationException:The   MyCompany.IWCFService3.Import   operation引用了一个消息元素   [http://MyCompany.ca/:Import]有   已经从中出口了   MyCompany.IWCFService2.Import   操作。您可以更改名称   其中一项操作是通过改变   方法名称或使用Name属性   of OperationContractAttribute。   或者,你可以控制   使用更详细的元素名称   MessageContract编程模型。       在System.ServiceModel.Description.MessageContractExporter.AddElementToSchema(XmlSchemaElement)   element,String elementNs,   XmlSchemaSet schemaSet)       在System.ServiceModel.Description.MessageContractExporter.ExportWrappedPart(消息   message,String elementName,String   elementNs,XmlSchemaSet schemaSet,   Boolean skipSchemaExport)       在System.ServiceModel.Description.DataContractSerializerMessageContractExporter.ExportBody(Int32)   messageIndex,Object state)       在System.ServiceModel.Description.MessageContractExporter.ExportMessage(Int32   messageIndex,Object state)       在System.ServiceModel.Description.MessageContractExporter.ExportMessageContract()       在System.ServiceModel.Description.DataContractSerializerOperationBehavior.System.ServiceModel.Description.IWsdlExportExtension.ExportContract(WsdlExporter)   出口国,   WsdlContractConversionContext   contractContext)       在System.ServiceModel.Description.WsdlExporter.CallExtension(WsdlContractConversionContext)   contractContext,IWsdlExportExtension   扩展)

1 个答案:

答案 0 :(得分:2)

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