Visual Studio 2008 не создает прокси-класс Web Service Reference.cs?

Я только что перенес проект из формата Visual Studio 2005 в Visual Studio 2008. Этот проект интенсивно использует потребляющие веб-службы.

Мы используем наш собственный родительский класс для сгенерированных прокси-классов (Reference.cs), которые создает Visual Studio.

Я добавил новую веб-ссылку, используя Visual Studio 2008, и она не генерировала прокси-класс, а только файл reference.map. Похоже, что, возможно, он строит их на лету. Это не сработает для моих нужд, так как мне нужно изменить код, чтобы он соответствовал нашей структуре.

Обратите внимание, что это веб-ссылки, а не ссылки на службы.

Кто-нибудь знает, как заставить VS2k8 работать как 2k5 у меня?


person FlySwat    schedule 30.04.2009    source источник


Ответы (2)


Возможно, вам следует использовать svcutil.exe или wsdl.exe для создания файлов классов прокси.

person Andrew Hare    schedule 30.04.2009
comment
svcutil генерирует прокси .net 3.0 и новее. Мне все еще нужен старый стиль 2.0, который генерирует wsdl.exe. - person FlySwat; 30.04.2009
comment
Не знаю, поэтому и спросил. Нигде в вашем сообщении вы не указали, что у вас есть. Поскольку вы, по-видимому, пробовали wsdl, возможно, вы могли бы отредактировать свой вопрос, включив в него сведения о том, почему wsdl не работает. - person Andrew Hare; 30.04.2009

Немного повозившись, я нашел это разместить в Интернете.

Оказывается, в предоставленном WSDL был фрагмент вроде:

<wsdl:message name="someMessageRequest">
    <wsdl:part name="parameters" element="ns0:someMessageRequest"/>
</wsdl:message>
<wsdl:message name="someMessageResponse">
    <wsdl:part name="parameters" element="ns0:someMessageResponse"/>
</wsdl:message>

... SNIP ...

<soap:operation style="document" soapAction="someMessage"/>
<wsdl:input>
     <soap:body use="literal" parts="parameters"/>
</wsdl:input>
<wsdl:output>
     <soap:body use="literal" parts="parameters"/>
</wsdl:output>

Поскольку он использует одно и то же имя для параметров запроса и ответа, wsdl.exe не может его разрешить и умирает.

Мое исправление:

<wsdl:message name="someMessageRequest">
    <wsdl:part name="parametersRequest" element="ns0:someMessageRequest"/>
</wsdl:message>
<wsdl:message name="someMessageResponse">
    <wsdl:part name="parametersResponse" element="ns0:someMessageResponse"/>
</wsdl:message>

... SNIP ...

<soap:operation style="document" soapAction="someMessage"/>
<wsdl:input>
     <soap:body use="literal" parts="parametersRequest"/>
</wsdl:input>
<wsdl:output>
     <soap:body use="literal" parts="parametersResponse"/>
</wsdl:output>

Теперь прокси сгенерирован.

Часть удовольствия от SoA заключается в том, что вы никогда не можете доверять WSDL, которые вам предоставлены для работы :)

person FlySwat    schedule 30.04.2009