Подтвердить что ты не робот

WCF: как сгенерировать один документ WSDL без WSDL: import?

Я беспокоюсь о проблеме... Я пытаюсь найти способ генерации одного документа wsdl из моей службы WCF, т.е. Без какой-либо ссылки на внешние документы. Я использовал FlatWsdl, чтобы удалить все ссылки xsd: import, bou мой сгенерированный wsdl по-прежнему содержит ссылку на внешний wsdl-документ через wsdl: import объявление:

<wsdl:import namespace="http://myurl/mynamespace"  
             location="http://myserver/myservice.svc?wsdl=wsdl0"/>  

Этот документ фактически содержит все встроенные схемы xsd, поэтому... есть способ встроить также этот внешний документ wsdl, чтобы иметь единственный wsdl?

Большое спасибо за любую помощь.

4b9b3361

Ответ 1

(EDIT: Предыдущий ответ о FlatWSDL удален, потому что, как вы указали, это было исключение xsd: import not wsdl: import.)

Посмотрите на этот блог-почтовый индекс: Управление созданным WSDL в WCF

"... Существует один WSDL, сгенерированный для одного URI-пространства имен..."

У вас есть другое пространство имен для ServiceContract, DataContract, ServiceBehavior и т.д.?

Ответ 2

Теперь вы можете сделать это изначально в .net 4.5 (beta). Существует опция (? SingleWsdl вместо? Wsdl), чтобы сообщить службе о выводе всего в одном документе wsdl. Подробнее о новом материале здесь: http://msdn.microsoft.com/en-us/library/dd456789(v=vs.110).aspx

Ответ 3

Вы также можете использовать проект WCFExtras, у которого есть расширение для создания одного WSDL файла.

WCFExtras

Коллекция полезных расширений WCF включая поддержку заголовка мыла, WSDL документацию и многое другое.

Платформа WCF очень расширяема и позволяет легко добавлять функции которые не являются частью основного продукта. Этот проект содержит некоторые расширения Мне нужно было в проекте на основе WCF:

  • Поддержка SOAP Header для WCF Добавление WSDL
  • Документация из исходного кода Комментарии XML
  • Переопределить URL-адрес адреса URL-адреса SOAP
  • Один файл WSDL для лучшей совместимости со старыми инструментами SOAP.

http://wcfextras.codeplex.com/

Ответ 4

моя проблема была в определениях конечных точек, которые находятся в пространстве имен tempuri.org добавление bindingNamespace в объявления конечных точек устраняет мою проблему. спасибо всем за помощь:)

Ответ 6

Это поздний ответ, но у меня была такая же проблема с некоторыми из наших служб WCF. Если вы используете .NET 4.5, как и более ранний ответ, используйте? SingleWSDL, но если вы не нацеливаете .NET 4.5, я добавил следующее в мой web.config, чтобы исправить проблему...

<useRequestHeadersForMetadataAddress>
  <defaultPorts>
    <add port="80" scheme="http" />
    <add port="443" scheme="https" />
  </defaultPorts>
</useRequestHeadersForMetadataAddress>

Это происходит в вашем поведении. Таким образом, мне не пришлось выравнивать WSDL, потому что все ссылки были на MyURL вместо MyServer.

Надеюсь, это поможет другим с подобной проблемой.

Ответ 7

В дополнение к ответу Джима выше, если вы используете код С# для непосредственного конфигурирования WCF ServiceHost:

using System.ServiceModel.Configuration;

и при настройке ServiceHost:

UseRequestHeadersForMetadataAddressBehavior urh = new UseRequestHeadersForMetadataAddressBehavior();
serviceHost.Description.Behaviors.Add(urh);

Я изо всех сил пытался найти эту информацию в Интернете, так просто, как есть. Надеюсь, кто-то поможет в подобной ситуации.