#wcf #ios
#wcf #iOS
Вопрос:
Я создал службу Windows WCF и сгенерировал для нее WSDL. Я использую базовую привязку http. Когда я пытаюсь вызвать это из IOS (используя сгенерированный класс BasicHttpBinding wsdl2objc) Я получаю ошибку при вызове одного из методов WCF. Ошибка (из logXMLInOut) указывает, что проблема связана с несоответствием адресов, однако я понятия не имею, как это отладить и или что я делаю неправильно.
Вот полное сообщение об ошибке:
2011-06-10 11:54:05.534 IpadWebServiceTest[10149:207] OutputHeaders:
{
"Content-Length" = 462;
"Content-Type" = "application/soap xml; charset=utf-8";
Host = "192.168.1.69";
Soapaction = "FredIannon.TestService/IHelloIndigoService/FredContractNoParm";
"User-Agent" = wsdl2objc;
}
2011-06-10 11:54:05.536 IpadWebServiceTest[10149:207] OutputBody:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:HelloIndigoService="FredIannon.TestService" xmlns:tns1="http://schemas.microsoft.com/2003/10/Serialization/" xsl:version="1.0">
<soap:Body>
<HelloIndigoService:FredContractNoParm/>
</soap:Body>
</soap:Envelope>
2011-06-10 11:54:05.589 IpadWebServiceTest[10149:207] ResponseStatus: 500
2011-06-10 11:54:05.590 IpadWebServiceTest[10149:207] ResponseHeaders:
{
"Content-Length" = 615;
"Content-Type" = "application/soap xml; charset=utf-8";
Date = "Fri, 10 Jun 2011 16:54:05 GMT";
Server = "Microsoft-HTTPAPI/2.0";
}
2011-06-10 11:54:05.591 IpadWebServiceTest[10149:207] ResponseBody:
<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">http://www.w3.org/2005/08/addressing/soap/fault</a:Action></s:Header><s:Body><s:Fault><s:Code><s:Value>s:Sender</s:Value><s:Subcode><s:Value>a:DestinationUnreachable</s:Value></s:Subcode></s:Code><s:Reason><s:Text xml:lang="en-US">The message with To '' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree.</s:Text></s:Reason></s:Fault></s:Body></s:Envelope>
Вот hosts app.config
<services>
<service
behaviorConfiguration="serviceBehavior"
name="HelloIndigo.HelloIndigoService">
<endpoint address="HelloIndigoService"
binding="basicHttpBinding"
bindingNamespace="FredIannon.TestService"
name="basicHttp"
contract="HelloIndigo.IHelloIndigoService" />
<endpoint binding="mexHttpBinding"
name="mex"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://192.168.1.69:8000/HelloIndigo/HelloIndigoService" />
<!-- <add baseAddress="http://localhost:8000/HelloIndigo/HelloIndigoService" /> -->
</baseAddresses>
</host>
</service>
</services>
Ответ №1:
Служба WCF получает ваше soap, но не может правильно проанализировать заголовки soap, сгенерированные прокси-сервером wsdl2objc. В этом сообщении есть хорошее описание реальной проблемы, с которой вы столкнулись. Чтобы определить, какие заголовки требуются, начните с создания клиента .NET WCF, который успешно вызывает службу. Посмотрите, какими должны быть ожидаемые заголовки, записав отправляемое им soap. Измените код вашего прокси, чтобы создавать точные заголовки soap, такие как .СЕТЕВОЙ клиент.