Я настраиваю действительно простую службу WCF, единственной задачей которой является получение XML-сообщения через SOAP и отправка сообщения во внутреннюю службу. Допустим, я создаю сторожевой пост таких.
(Фактические имена были заменены, например)
Начальная информация:
Я не могу изменить внешнюю службу, звонящую мне. Насколько я знаю, это клиент Soap11, встроенный в Java.
В этом примере все имена были заменены на фиктивные.
Конечная точка-установка:
<service behaviorConfiguration="GuardpostBehavior" name="Guardpost.ContractImplementation">
<endpoint address="" binding="basicHttpBinding" contract="Guardpost.IContract" bindingConfiguration="basic">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</service>
Конфигурация переплета:
<basicHttpBinding>
<binding name="basic" textEncoding="utf-8" messageEncoding="Text">
<security mode="Transport" />
</binding>
</basicHttpBinding>
(мне нужна Транспортная безопасность из-за https)
Мой контракт выглядит так:
[ServiceContract]
public interface IContract
{
[OperationContract(Action="urn:#GuardpostReceive")]
void GuardpostReceive(string inputXml);
}
Теперь я получаю сообщение в оболочке из мыла, в котором для Action задано значение urn: #GuardpostReceive, поэтому фактическая маршрутизация сообщения выполнена правильно.
Однако - Когда сообщение получено, оно фактически не помещается в метод из-за этой ошибки:
OperationFormatter обнаружил недопустимое тело сообщения. Ожидается найти тип узла «Элемент» с именем «inputXml» и пространством имен »http://tempuri.org/'. Найден тип узла« Элемент »с именем« extns: ExternalNodeName »и пространством имен« http://foo.com/bar.org/someservice/schema/1'
Кажется, проблема в том, что мой WCF-сервис не может извлечь тело сообщения Soap и просто передать его в виде простого XML, но это то, что мне нужно для этого.
Сталкивался ли я с showtopper в WCF?