Односторонний метод службы WCF с сообщением об ошибке

StackOverflow https://stackoverflow.com//questions/9680781

  •  13-12-2019
  •  | 
  •  

Вопрос

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

Я использую генератор синего кода wscf для файлов wsdl и контрактов.

В элементе операции wsdl у меня есть только дочерние элементы «Вход» и «Ошибка».Когда я запускаю службу, я получил информацию, которая не может объявить сообщение о неисправности при односторонней связи и..одно из решений — установить одностороннее значение false..что я сделал, и все работает нормально.Если произойдет ошибка, я получу сообщение.

Однако мне интересно, нарушил ли я правила создания веб-сервиса/wsdl...Поскольку генератор схемы службы wsdl создает для меня одностороннюю связь (установленную в значение «истина»), а другие генераторы на других языках программирования, вероятно, будут делать то же самое...

Так правильно ли то, что я сделал?Как я могу изменить wsdl, чтобы генератор мог правильно создавать код?

Если теоретически я не могу использовать ошибку при односторонней связи, тогда нужна ли мне дополнительная структура ответа, чтобы вернуть какую-либо ошибку?

Спасибо!

Это было полезно?

Решение

Это правда, что односторонние операции не могут возвращать ошибки клиентам.Если вы хотите создать void не в одну сторону операция службы в WCF, вам придется добавить пустой выходной элемент для этой операции в вашем контракте WSDL.

Парсеры WSDL на базе .NET (например, WSCF.синий и svcutil) будет генерировать односторонние сервисные операции для <wsdl:operation> элементы, которые не иметь соответствующий <wsdl:output> элемент.

Например, эта операция WSDL это односторонний:

<wsdl:definitions>
    <wsdl:portType>
        ... 
        <wsdl:operation name="Foo">
           <wsdl:input message="tns:FooRequest" />
        </wsdl:operation>
    </wsdl:portType>
</wsdl:definitions>

С другой стороны, определение операции с пустым <wsdl:output> элемент (т. е. тип XSD, содержащий пустая последовательность) будет сопоставлен с void не в одну сторону метод в .NET, который может дополнительно содержать объявление об ошибке:

<wsdl:definitions>
    <wsdl:portType>
        ... 
        <wsdl:operation name="Foo">
           <wsdl:input message="tns:FooRequest" />
           <wsdl:output message="tns:FooResponse" />
           <wsdl:fault message="tns:FooFault" />
        </wsdl:operation>
    </wsdl:portType>
</wsdl:definitions>

где <tns:FooResponse> тип просто определяется как:

<xs:element name="FooResponse">
    <xs:complexType>
        <xs:sequence/>
    </xs:complexType>
</xs:element>

Другие советы

В WCF односторонние средства операции не имеют возвращаемых значений, и клиент не заботится об успехе или неудаче вызова.

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

Итак, если вы хотите вернуть что-то, чтобы указать статус вызова, то один путь не является правильным выбором, вы можете просто использовать нормальную работу WCF, которая не является односторонним.

для односторонней операции, вот статья для вашей справки WCF One-Way

Я чувствую, что ты правильно.Для любого типа клиента (C #, Java, C ++, PHP) им просто нужно WSDL для создания прокси.Я чувствую, что это должно работать на других языках.Лучше всего использовать SOAPUI (нейтральный мыльный клиент) для проверки вашего сервиса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top