Я столкнулся с проблемой при вызове веб-службы на шине 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.
Спасибо за любые предложения.