2013-10-09 4 views
1

У меня возникла проблема с использованием веб-службы PHP WCF. Во-первых, я стараюсь сделать прокси-класс с помощью «Добавить ссылку на службу», но это не работает:Использование веб-службы PHP клиентом WCF

enter image description here

Полное сообщение об ошибке:

There was an error downloading 'http://xxx.yyy.zzz.pl/Swdsoapserver/query?wsdl/_vti_bin/ListData.svc/$metadata'. 
The request failed with the error message: 
-- 
<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>Sender</faultcode><faultstring>Invalid XML</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope> 

--. 
Metadata contains a reference that cannot be resolved: 'http://xxx.yyy.zzz.pl/Swdsoapserver/query?wsdl'. 
The content type text/html; charset=UTF-8 of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were: '<?xml version="1.0" encoding="UTF-8"?> 
<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:tns="http://xxx.yyy.zzz.pl/Swdsoapserver/query" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="SwdQuerySoap" 
    targetNamespace="http://xxx.yyy.zzz.pl/Swdsoapserver/query"> 
    <wsdl:types> 
     <xsd:schema 

Я разговариваю с человеком, что проведение этого веб-службы в PHP, и он говорит мне, что он потребляет это веб-сервис, в чем-то вроде этого:

$Http = new Zend_Controller_Request_Http(); 
     $client = new SoapClient("http://".$Http->getServer('HTTP_HOST')."/Swdsoapserver/queryko?wsdl", array  ('trace'   => true)); 
     $object->sy = "12345678"; 
     $client->getParcel($object, base64_encode('xyzxyz')); 

Это base64_encode («xyzxyz») является Hash, который необходим для подключения.

Любой совет, как использовать эту службу в C# .NET ??

редактирование: Экраны из IE: IE1 IE2 IE3

редактировать: Сохранить файл на диск и добавить в Visual Studio (есть и мои 2 другие услуги ФОС) enter image description here

+0

Можете ли вы просмотреть WSDL в навигаторе? –

+0

Я отредактировал мой вопрос и добавил несколько скриншотов из WSDL, которые я вижу в навигаторе IE. – zchpit

+1

Вы можете попробовать сохранить файл на своем локальном компьютере и сделать ссылку на этот файл. –

ответ

1

Прежде всего , вы должны просмотреть WSDL в своем любимом навигаторе. Сохраните файл на локальном compouter.

Шаг 2, вы должны сделать Service Reference к этому файлу. Обычно он создает клиент (WCF) для вашего веб-сервиса PHP в вашем проекте.

Последний шаг, вы должны только инициировать клиента в WCF.

+0

Я подключаюсь к этой службе и отправляю запрос, но когда получаю ответ, у меня есть «Вы не можете назначить объект типа System.Int32 объекту типа System.Int32 []« Stacktrace: System.ServiceModel.Dispatcher. XmlSerializerOperationFormatter.DeserializeBody (XmlDictionaryReader reader, версия MessageVersion, сериализатор XmlSerializer, MessagePartDescription returnPart, MessagePartDescriptionCollectio ... – zchpit

+0

WSDL кажется немного странным. Всегда существует minOccurs для 1 и maxOccurs для неограниченного. В файле reference.cs (в справочном каталоге службы, если вы покажете все файлы, вы сможете увидеть этот файл), вы должны иметь описание каждого поля, и каждое поле должно быть объявлено как массив. Есть ли способ исправить/обновить WSDL-файл файла PHP? Если нет, вы можете вручную изменить тип каждого поля. –

+0

Нет, нет способа обновить файл PHP WSDL, но я делаю это в anot ее путь. Я меняю тип возвращаемого класса прокси-сервера на объект, и он дает мне XmlNode [], и теперь я пишу свой собственный анализатор xml-> myClass, чтобы получить информацию, которая мне нужна из этой веб-службы. Thx за помощью. – zchpit

Смежные вопросы