Как устанавливается значение OperationContractAttribute.Action?

Я использую параметр «Добавить ссылку на службу» в Visual Studio, чтобы создать прокси-класс, используя файл WSDL, предоставленный мне третьей стороной. У меня есть 2 версии WSDL — назовем их «СТАРЫЙ» и «НОВЫЙ».

Несмотря на то, что файлы WSDL должны быть одинаковыми (новый получил обновленную версию методов), при создании прокси-классов я получаю разные значения в OperationContractAttribute.Action.

В СТАРОМ wsdl это выглядит так:

[System.ServiceModel.OperationContractAttribute(Action="http://webservices.amadeus.com/SATRQT_13
[System.ServiceModel.OperationContractAttribute(Action="http://xml.amadeus.com/AmadeusWebServicesPT/Air_MultiAvailabilityRequest", ReplyAction="http://xml.amadeus.com/AmadeusWebServicesPT/Air_MultiAvailabilityResponse")]
1A", ReplyAction="*")]

В новом wsdl это выглядит так:

[System.ServiceModel.OperationContractAttribute(Action="http://xml.amadeus.com/AmadeusWebServicesPT/Air_MultiAvailabilityRequest", ReplyAction="http://xml.amadeus.com/AmadeusWebServicesPT/Air_MultiAvailabilityResponse")]

Я не могу понять, откуда берется значение «Действие».

В старом WSDL значение допустимо, но в новом WSDL совершенно неверно, и я получаю исключение при попытке использовать службу в WS.

Когда я просматриваю СТАРЫЙ файл wsdl, я вижу «soapAction» с тем же значением; это, кажется, откуда это взято. Однако в НОВОМ wsdl есть значение точно такое же, как и в СТАРОМ wsdl

<wsdl:operation name="Air_MultiAvailability">
  <soap:operation soapAction="http://webservices.amadeus.com/SATRQT_13_2_1A" />

Может ли кто-нибудь направить меня в нужное место?

Обновлять

Прочитав еще немного об элементе «Действие», я понял, что значение, которое я вижу в НОВОМ wsdl, является значением ПО УМОЛЧАНИЮ (см. https://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.action(v=vs.110).aspx)

Теперь мне нужно понять, ПОЧЕМУ в СТАРОМ файле wsdl мы получаем правильное значение Action (я предполагаю, что soapAction определено в файле wsdl при правильной операции) и в НОВОМ wsdl совпадений нет и заполняется значение по умолчанию?


person Dardar    schedule 09.05.2018    source источник


Ответы (1)


ок нашел проблему!

в файле WSDL было несколько «Операций» с тем же именем

<wsdl:portType name="WebServices"> 
  <wsdl:operation name="DoSomething">
      <wsdl:input message="ns:DoSomething_1_1" />
      <wsdl:output message="ns:DoSomething_1_1" />
    </wsdl:operation>
    <wsdl:operation name="DoSomething">
      <wsdl:input message="ns:DoSomething_2_2" />
      <wsdl:output message="ns:DoSomething_2_2" />
    </wsdl:operation>
  </wsdl:portType>

<wsdl:binding type="ns:WebServices" name="WebServicesBinding">
    <wsdl:operation name="DoSomething">
      <soap:operation soapAction="http://webservices.my.com/DoSomething_1_1" />
    </wsdl:operation>
    <wsdl:operation name="DoSomething">
      <soap:operation soapAction="http://webservices.my.com/DoSomething_2_2" />
    </wsdl:operation>
</wsdl:binding>

"DoSomething" получил 2 версии в этом примере 1.1 и 2.2 после того, как я удалил\переименовал ВСЕ повторяющиеся операции (у меня их было несколько) значение "Action" было взято из элемента "soapAction"

надеюсь, что это поможет кому-то в будущем!

person Dardar    schedule 16.05.2018