У меня возникла проблема при вызове веб-сервиса на шине SAP PI от моего клиента WCF. Операция определяется как односторонняя, а метод моего контракта с оператором-посредником оформляется соответствующим образом при добавлении ссылки на службу. Тем не менее, клиент службы получает исключение при вызове соответствующей операции:
Односторонняя операция возвратила ненулевое сообщение с Action = ''
Используя SoapUI, метод на шине можно вызвать успешно и возвращает SOAP-конверт с пустым телом. Люди автобуса сказали мне, что это соответствует спецификациям SOAP:
(спецификации SOAP, глава 4.7.9, односторонние операции):
Существуют разные интерпретации того, как HTTP должен использоваться при выполнении односторонних операций.
R2714 Для однонаправленных операций INSTANCE НЕ ДОЛЖНА возвращать HTTP-ответ, содержащий конверт. В частности, тело-ответчик HTTP-сообщения должно быть пустым.
R2750 ПОТРЕБИТЕЛЬ ДОЛЖЕН игнорировать конверт, переданный в ответном сообщении HTTP в односторонней операции.
R2727. Для однонаправленных операций ПОТРЕБИТЕЛЬ НЕ ДОЛЖЕН интерпретировать успешный код статуса ответа HTTP (т.е. 2xx), чтобы означать, что сообщение действительно или что получатель обработает его.
Итак, мой WCF-клиент не соответствует R2750.
Я выяснил, что, когда я принуждаю оператор операции к прокси-серверу быть IsOneWay = false, все работает.
Есть ли что-то неправильное в том, как WCF обрабатывает односторонние операции или я делаю что-то неправильно (скорее)? Есть ли что-то еще, что я должен делать, просто не представляется прав переопределять созданный клиент прокси-сервера WCF.
Спасибо за любые предложения.