2011-01-08 3 views
4

Я пытаюсь создать веб-сервис с помощью wdsl и soap. Сервер должен быть написан на php.веб-сервис с использованием мыла и wsdl не работает php

На данный момент я пробую вещи, добавив только одну функцию к объекту мыльного сервера. Мое требование состоит в том, что эта функция должна принимать ассоциативный массив. Сейчас он возвращает строку, но ее просто пробную версию на данный момент, а также возвращает массив в соответствии с требованием.

Для принятия массива-члена в качестве входных данных я определил complexType в wsdl. Ниже приводится код

<types> 
    <xsd:schema 
    targetNamespace="http://projects.kp/test/webservice/StoreService.wsdl" 
    xmlns="http://www.w3.org/1999/XMLSchema/"> 
    <xsd:complexType name="store"> 
     <xsd:element name="name" type="xsd:string" /> 
     <xsd:element name="subdomain" type="xsd:string" /> 
    </xsd:complexType> 
    </xsd:schema> 
</types> 
<message name="StoreRequest"> 
    <part name="store" type="tns:store"/> 
</message> 
<message name="StoreResponse"> 
    <part name="url" type="xsd:string"/> 
</message> 

Когда я запускаю файл клиента мыльного в браузере, это дает следующее сообщение об ошибке.

Fatal error: Uncaught SoapFault exception: 
[WSDL] SOAP-ERROR: Parsing Schema: unexpected in complexType 

Если я использую строковый тип данных вместо complexType, он работает правильно. Я догадываюсь, что еще не понял, как работают complexTypes, поэтому я не могу отладить это.

Также я хотел бы знать, будет ли массив, когда тип запроса и ответа будет работать, если клиент закодирован на другом языке, скажем, .NET.

(Сейчас я тестирую это на виртуальном хосте на рабочем столе Ubuntu и клиент и сервер находятся на одной и той же виртуальный хост и как написано в PHP)

Благодарности

+0

Это ваш WSDL Почему вы используете 'type' в' part' элемента сообщения Это используется в RPC/Encoding. Вы используете RPC или doc/literal? Если вы используйте doc вместо replace в ''. Кроме того, префикс tns связывается с пространством targerNamespace? – Cratylus

+0

привет благодарю за ответ. да это мой WSDL. как я знаю, если это RPC или doc/literal! извините, глупый вопрос, но я имею в виду различные онлайн-уроки и ресурсы для этого. и я попробовал «element» вместо «type» в соответствии с одним учебником, с которым я столкнулся, но он не помог и не вызвал путаницу. Также я не смог найти простую ссылку, объясняющую основы, поэтому хорошая ссылка действительно поможет. спасибо – naiquevin

+1

Если дочерний элемент 'part'' message' имеет атрибут 'type', это означает кодирование RPC, и это также следует упомянуть в разделе привязки. Если дочерний элемент 'part'' message' имеет атрибут 'element', это означает, что он является документом и также упоминается как doc в привязке. Хорошее описание различий здесь (хотя и не последнее, но все же хорошее) http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/ – Cratylus

ответ

6

Я думаю, вам нужно установить XSD: все или XSD: последовательность перед тем XSD:? элемент

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