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?
Большое спасибо за любую помощь.
Ответы
Ответ 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 в объявления конечных точек устраняет мою проблему.
спасибо всем за помощь:)
Ответ 5
Вам нужно добавить дополнительные поведения и т.д.
Смотрите эти статьи здесь:
http://my-tech-talk.blogspot.com/2008/07/adding-flatwsdl-to-wcf-webservice.html
http://blogs.thinktecture.com/cweyer/archive/2007/05/10/414840.aspx
Существует несколько способов достижения этого.
Марк
Ответ 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);
Я изо всех сил пытался найти эту информацию в Интернете, так просто, как есть. Надеюсь, кто-то поможет в подобной ситуации.