Добавьте, что Сервисная Ссылка генерирует сообщение Контракты

Когда я импортирую данное сервисное использование, "Добавьте сервисная Ссылка" на Visual Studio 2008 (SP1), весь Запрос/Ответные сообщения излишне переносится в сообщение Контракты (названный как-> "operationName" + "Запрос" / "Ответ" + "1" в конце).

Генератор кода говорит:

// CODEGEN: Generating message contract since the operation XXX is neither RPC nor 
// document wrapped.

Парни, которые генерируют wsdl от сервиса Java, говорят, что они указывают DOCUMENT-LITERAL/WRAPPED.

Любая справка/указатель/подсказка высоко ценилась бы.

Обновление: это - образец моего wsdl для одной из операций тот подозрительный взгляд. Отметьте несоответствие на атрибуте элемента сообщений для запроса, по сравнению с ответом.

<!- imports namespaces and defines elements -->
<wsdl:types>
  <xsd:schema targetNamespace="http://WHATEVER/" xmlns:xsd_1="http://WHATEVER_1/" xmlns:xsd_2="http://WHATEVER_2/">
      <xsd:import namespace="http://WHATEVER_1/" schemaLocation="WHATEVER_1.xsd"/>
      <xsd:import namespace="http://WHATEVER_2/" schemaLocation="WHATEVER_2.xsd"/>
      <xsd:element name="myOperationResponse" type="xsd_1:MyOperationResponse"/>
      <xsd:element name="myOperation" type="xsd_1:MyOperationRequest"/>
   </xsd:schema>
</wsdl:types>

<!- declares messages - NOTE the mismatch on the request element attribute compared to response -->
<wsdl:message name="myOperationRequest">
   <wsdl:part element="tns:myOperation" name="request"/>
</wsdl:message>
<wsdl:message name="myOperationResponse">
   <wsdl:part element="tns:myOperationResponse" name="response"/>
</wsdl:message>

<!- operations -->
<wsdl:portType name="MyService">
   <wsdl:operation name="myOperation">
      <wsdl:input message="tns:myOperationRequest"/>
      <wsdl:output message="tns:myOperationResponse"/>
      <wsdl:fault message="tns:myOperationFault" name="myOperationFault"/>
      <wsdl:fault message="tns:myOperationFault1" name="myOperationFault1"/>
   </wsdl:operation>
</wsdl:portType>

Обновление 2: Я вытянул все типы, которые я имел в своем импортированном пространстве имен (они были в отдельном xsd) в wsdl, поскольку я подозревал, что импорт мог инициировать поколение контракта сообщения. К моему удивлению это не имело место, и определяющий все типы в wsdl ничего не изменил.

Я затем (из отчаяния) начал создавать wsdls с нуля и играть с maxOccurs атрибуты атрибутов элемента содержали в атрибуте последовательности, я смог воспроизвести нежелательное поведение поколения контракта сообщения.

Вот образец элемента:

<xsd:element name="myElement">
   <xsd:complexType>
      <xsd:sequence>
         <xsd:element minOccurs="0" maxOccurs="1" name="arg1" type="xsd:string"/>
      </xsd:sequence>
   </xsd:complexType>
</xsd:element>

Проигрывание с maxOccurs на элементах, которые используются в качестве сообщений (все запросы и ответы в основном) происходит следующее:

  • maxOccurs = "1" не инициировал обертывание
  • macOcccurs> 1 триггер обертывание
  • maxOccurs = "неограниченные" триггеры обертывание

Я не смог воспроизвести это на своем производстве wsdl все же, потому что вложение типов идет очень глубоко, и оно собирается брать меня время для осмотра его полностью. В это время я надеюсь, что это могло бы позвонить в звонок - любая справка, высоко ценившая.

15
задан SteveC 5 October 2015 в 13:59
поделиться

2 ответа

Вы пробовали использовать scvutil Goto -> Startmenu / Visual Studio 2008 / Tools / VS Command Prompt

Введите svcutil, затем проверьте параметры , особенно параметр / wrapped. В конечном итоге используйте это для создания вашего прокси, это дает вам гораздо больше контроля над происходящим

1
ответ дан 1 December 2019 в 04:17
поделиться

Вот еще один пункт для проверки:

  1. Щелкните правой кнопкой мыши ссылку на службу в обозревателе решений и выберите 'Настроить ссылку на службу'

  2. Проверьте, установлен ли флажок "Всегда создавать контракты сообщений".

4
ответ дан 1 December 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: