BizTalk Generic WCF Http Receive Location для операций веб-служб, возвращающих void - PullRequest
1 голос
/ 23 декабря 2011

Я пытаюсь создать общее местоположение получения BizTalk (WCF-WSHttp), которое принимает любой вызов веб-службы для методов, возвращающих "void" .(Расположение является общим, потому что BizTalk пересылает сообщение в реальную реализацию сервиса)

Я знаю, что истинные односторонние операции не поддерживаются (за исключением WCF MSMQ), поэтому операция имеет [OperationContract (IsOneWay =false)]

Я могу вызвать универсальную службу с клиентом WCF, и BizTalk правильно обрабатывает сообщение.Однако BizTalk затем возвращает ответ, который клиент не распознает, и клиенты выдают следующее исключение:

System.ServiceModel.CommunicationException: Ошибка в десериализации тела ответного сообщения для операции «MyOperationName». OperationFormatter не может десериализовать какую-либо информацию из сообщения, поскольку сообщение пустое (IsEmpty = true).

Это пример ответа, который клиент может распознать (протестировановызов реализации службы напрямую, без использования BizTalk в качестве посредника):

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
   <s:Header>
     <a:Action s:mustUnderstand="1"/>
     <a:RelatesTo>urn:uuid:102509d6-15c6-4959-9a98-b714d5d16a1f</a:RelatesTo>
   </s:Header>
   <s:Body>
     <MyOperationResponse xmlns="http://mynamespace"/>
   </s:Body>
 </s:Envelope>

Однако, вот пример ответа, который возвращает BizTalk:

 <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
    <s:Header>
        <a:RelatesTo>urn:uuid:9e794c0c-65f0-4807-b1f2-84a30587df9b</a:RelatesTo>
    </s:Header>
    <s:Body/>
 </s:Envelope>

(я использую один-wayway location, поэтому мне не нужно было писать код, чтобы это возвращалось)

Это имеет два отличия от XML, ожидаемого клиентом:

  • Нет
  • Пусто

Я вижу два способа решения этой проблемы:

  1. Измените контракт операции (интерфейс C #), чтобы ожидать пустой ответ / никаких действий вместочто он в настоящее время ожидает.
  2. Сконфигурируйте BizTalk для возврата XML, который ожидает клиент

Любые идеи о том, как получить решение 1 или решение 2?

Для решения 1 япопытался поиграть с атрибутом [OperationContract (ReplyAction = ...)], но не смог найти способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...