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