WCF: как создать отдельный документ WSDL, без WSDL: импорт? - PullRequest
22 голосов
/ 12 июня 2009

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

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

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

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

Ответы [ 7 ]

19 голосов
/ 28 декабря 2011

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

13 голосов
/ 12 июня 2009

(РЕДАКТИРОВАТЬ: предыдущий ответ об удалении FlatWSDL, потому что, как вы указали, речь шла об исключении xsd: import, а не wsdl: import.)

Посмотрите на этот пост: Управление сгенерированным WSDL в WCF

"... Для одного целевого URI пространства имен всегда создается один WSDL ..."

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

4 голосов
/ 12 июня 2009

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

WCFExtras

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

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

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

http://wcfextras.codeplex.com/

2 голосов
/ 12 июня 2009

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

1 голос
/ 30 января 2015

Это поздний ответ, но у меня была такая же проблема с некоторыми из наших служб 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.

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

1 голос
/ 12 июня 2009

Вам нужно добавить некоторые дополнительные поведения и т. Д.

Смотрите эти статьи здесь:

http://my -tech-talk.blogspot.com / 2008/07 / добавлений-flatwsdl к ФОС-webservice.html

http://blogs.thinktecture.com/cweyer/archive/2007/05/10/414840.aspx

Есть несколько различных способов достижения этого.

Марк

0 голосов
/ 27 февраля 2015

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

using System.ServiceModel.Configuration;

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

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

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

...