Проблема с WCF BasicHttpBinding - PullRequest
2 голосов
/ 12 июля 2011

Я создал службу WCF, у меня есть две конечные точки, одна для wsHttpBinding и одна для basicHttpBinding. Я могу использовать wsHttpBinding и basicHttpBinding, просто отлично с вызовом ASP.Net.

У меня возникают проблемы при попытке использовать базовый сервис HTTBBinding с php.

Вот метаданные.

    <wsdl:definitions name="PURLService" targetNamespace="http://xxx.xxx.com/TMServices/">
  <wsdl:import namespace="http://tempuri.org/" location="http://xxx.xxx.com/TMServices/PURLServ.svc?wsdl=wsdl1"/>
  <wsdl:types/>
  <wsdl:service name="PURLService">
    <wsdl:port name="WSHttpBinding_ITMService" binding="i0:WSHttpBinding_ITMService">
      <soap12:address location="http://xxx.xxx.com/TMServices/PURLServ.svc/ws"/>
      <wsa10:EndpointReference>
        <wsa10:Address>http://xxx.xxx.com/TMServices/PURLServ.svc/ws</wsa10:Address>
        <Identity>
          <Spn>host/xxx.xxx.com</Spn>
        </Identity>
      </wsa10:EndpointReference>
    </wsdl:port>
    <wsdl:port name="BasicHttpBinding_ITMService" binding="i0:BasicHttpBinding_ITMService">
      <soap:address location="http://xxx.xxx.com/TMServices/PURLServ.svc/basic"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

, когда я пытаюсь вызвать конечную точку basicHttpBinding, давая адрес http://xxx.xxx.com/TMServices/PURLServ.svc/basic на php, я получаю следующую ошибку "SOAP-ERROR: синтаксический анализ WSDL: не удалось загрузить с 'http://xxx.xxx.com/TMServices/PURLServ.svc/basic': не удалось загрузить внешнюю сущность "

это код php:

$wsdl = "http://xxx.xxx.com/TMServices/PURLServ.svc/basic";

try {


$client = new SoapClient($wsdl);


$result = $client->TestServices(); //this should return true if accessed

print $result;
} catch (Exception $e) {
echo 'Caught exception: ',  $e->getMessage(), "\n";
}   

?>

Также я не могу получить прямой доступ к http://xxx.xxx.com/TMServices/PURLServ.svc/basic Я получаю ошибку 400 Bad Request.

, когда я пытаюсь с адресом http://xxx.xxx.com/TMServices/PURLServ.svc?wsdl в коде php, я получаю следующую ошибку: «Не удается обработать сообщение, потому что тип содержимого« text / xml; charset = utf-8 »не был ожидаемым типом» application / soap + xml; charset = utf-8 '. "

Я ценю любую помощь.

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

Сначала убедитесь, что ваша служба WCF и клиент PHP используют одну и ту же версию протокола SOAP (1.1) вместо basicHttpBinding.

Создайте свой PHP-клиент, ссылаясь на файл WSDL.

Например:

// Create a new soap client based on the service's metadata (WSDL)
$client = new SoapClient("http://localhost:8731/FileUploadService?wsdl")

Что касается ошибки набора символов (UTF-8), вы можете указать своему клиенту PHP, какой набор символов он должен использовать:

$client->soap_defencoding = 'UTF-8';
0 голосов
/ 12 июля 2011

Попробуйте перейти непосредственно на страницу обслуживания (http://xxx.xxx.com/TMServices/PURLServ.svc). Скорее всего, в вашем сервисе есть проблема, которая мешает его загрузке, и вы должны понять, что это такое, когда пытаетесь перейти к нему.

Моя память туманная, но, кажется, я помню подобное поведение в прошлом («Невозможно обработать сообщение, потому что тип содержимого« text / xml; charset = utf-8 »не был ожидаемым типом» application / soap + xml; charset = utf-8 '. "), когда у меня возникла проблема с загрузкой службы.

...