Ошибка при доступе к WSDL моих служб WCF: «Операция ... ссылается на элемент сообщения…, который уже был экспортирован из…» - PullRequest
0 голосов
/ 07 января 2011

Я испытываю странное поведение при доступе к моим веб-службам через веб-браузер, и это приводит к исключению при генерации.

Вот мой сценарий:

  1. Доступ к веб-странице: http://localhost:10100/WCFService1.svc?wsdl

  2. Доступ к веб-странице: http://localhost:10100/WCFService2.svc?wsdl

Проблема в том, что выходные данные WCFService2.svc WSDL содержат все определения WCFService1, объединенные с WCFService2.

Более того, когда я получаю доступ к другому WSDL, который содержит метод с тем же именем, что и ранее сгенерированный WSDL, я получаю это исключение (конечно, потому что мой WSDL объединяется).

Я также заметил, что название контракта довольно странно, если перед именем службы указано «:»: http://MyCompany.ca/:IWCFService3

Кто-то знает, что происходит с «расширением экспорта WSDL»?


ExceptionDetail, вероятно, созданный IncludeExceptionDetailInFaults = истина, чье значение:
System.InvalidOperationException: исключение было брошено в вызове к Расширение экспорта WSDL:
System.ServiceModel.Description.DataContractSerializerOperationBehavior контракт: http://MyCompany.ca/:IWCFService3
----> System.InvalidOperationException: MyCompany.IWCFService3.Import операция ссылается на элемент сообщения [http://MyCompany.ca/:Import], который имеет уже был экспортирован из MyCompany.IWCFService2.Import операция. Вы можете изменить имя одна из операций путем изменения имя метода или использование свойства Name OperationContractAttribute. Кроме того, вы можете контролировать имя элемента более подробно, используя модель программирования MessageContract. в System.ServiceModel.Description.MessageContractExporter.AddElementToSchema (XmlSchemaElement element, String elementNs, XmlSchemaSet schemaSet) в System.ServiceModel.Description.MessageContractExporter.ExportWrappedPart (Сообщение сообщение, строка имя элемента, строка elementNs, XmlSchemaSet schemaSet, Логическое скипSchemaExport) в System.ServiceModel.Description.DataContractSerializerMessageContractExporter.ExportBody (Int32 messageIndex, Состояние объекта) в System.ServiceModel.Description.MessageContractExporter.ExportMessage (Int32 messageIndex, Состояние объекта) в 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 Ответ

2 голосов
/ 07 января 2011

Я обнаружил свою проблему: у нас огромный набор веб-сервисов, и у нас был один экземпляр System.ServiceModel.Description.ServiceMetadataBehavior, который мы разделяли между всеми сервисами. Создание нового экземпляра ServiceMetadataBehavior для каждой службы устранило проблему.

...