Ошибка утилиты командной строки .Net WSDL - PullRequest
0 голосов
/ 07 января 2009

Я указываю утилиту WSDL командной строки .Net, которая поставляется вместе с Visual Studio 2005, на веб-службу, реализованную на Java (которую я не могу контролировать), и выдает следующую ошибку:

WSDL : error WSDL1: Unable to cast object of type 'System.Xml.XmlElement' 
to type 'System.Web.Services.Description.ServiceDescriptionFormatExtension'.

Тем не менее, если я сам указываю Visual Studio 2005 на службу через диалоговое окно «Добавить веб-ссылку», он прекрасно создает прокси-класс для меня.

Я использую утилиту WSDL для генерации всех моих прокси-серверов других служб (хотя старый действительно генерирует кучу предупреждений).

В настоящее время я указываю утилите WSDL на URL развернутых веб-сервисов. Все из которых были разработаны на Java.

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

Ответы [ 3 ]

2 голосов
/ 30 января 2009

Попробуйте указать опцию протокол SOAP12

/ протокол: протокол ( как показано на MSDN )

Указывает протокол для реализации. Вы можете указать SOAP (по умолчанию), HttpGet, HttpPost или пользовательский протокол, указанный в файле конфигурации. При использовании параметра / parameters это значение является элементом и содержит строку.

Если это не поможет, тогда .......

При добавлении веб-ссылки «Добавить веб-ссылку» в Visual Studio вызывает файл WSDL.exe. По сути, нет разницы , кроме элемента управления, который вы сохраняете при запуске команды WSDL.exe из командной строки. Я подозреваю, что один из ваших аргументов неверен или отличается от того, который устанавливает Visual Studio.

Чтобы проверить это, вам нужно сравнить выходные данные из двух разных сгенерированных XSD-файлов, что даст вам более полное представление о том, что не так (как предложил Клатзазт).

Удачи

0 голосов
/ 01 июня 2011

Мне удалось избавиться от этой ошибки, украсив (конкретный) Сервис ServiceBehavior и предоставив ему Пространство имен.

using System.ServiceModel;

[ServiceBehavior(Name = "MyConcreteServiceName", Namespace = "http://www.mycompany.com/services/")]
public class MyConcreteService: IMyService
{
}

Примечание: Устанавливается через атрибут ServiceBehavior для класса обслуживания (а не контракта (интерфейса))

Вместо этого:

<wsdl:definitions name="MyConcreteServiceName" targetNamespace="http://tempuri.org/">

Я получил это:

<wsdl:definitions name="MyConcreteServiceName" targetNamespace="http://www.mycompany.com/services/">
0 голосов
/ 27 января 2009

Это XSD-файл? файлы имеют зависимости. Загрузите файлы зависимостей и поместите их рядом с загруженным XSD. Я предполагаю, что visual studio может получать зависимости.

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

...