Включить тип схемы в файл WSDL
Я создал WSDL вручную, который имеет только одну операцию без входного параметра и без выходного параметра.
Я получаю следующую ошибку, когда пытаюсь создать клиента из этого WSDL:
не удается импортировать wsdl: portType Деталь: исключение было вызвано при запуске расширения импорта WSDL: System.Средство servicemodel.Описание:.DataContractSerializerMessageContractimporter Ошибка: схема с целевым пространством имен 'http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/ ' не удалось найти. XPath для источника ошибок: //wsdl:definitions[@targetNamespace='http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/']/wsdl:portType[@name='GAMEAssociateIntf'] C:toolboxBlueTestBloodRedTestBloodRedTestService
на types
(для использования в клиенте) необходимо сгенерировать из XML, присутствующего в WSDL. Я думаю, при добавлении ссылки на службу , инструмент не может создать его из-за некоторой ошибки в XML. The xsd-схемы кажется, проблема.
какие изменения необходимо сделать в WSDL для создания прокси-сервера ?
примечание: Я пытаюсь включить типы xml, определенные в самом WSDL. [Мне не нужен отдельный файл для защиты схемы]
WSDL
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="GAMEAssociate"
targetNamespace="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/"
xmlns:tns="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsp="http://www.w3.org/ns/ws-policy"
>
<types>
<xsd:schema>
</xsd:schema>
<xsd:element name="myData">
<xsd:complexType />
</xsd:element>
<xsd:element name="myDataResponse">
<xsd:complexType />
</xsd:element>
</types>
<message name="getAllVicePresidentsRequest">
<part element="tns:myData" name="getAllVicePresidentsRequest"/>
</message>
<message name="getAllVicePresidentsResponse">
<part element="tns:myDataResponse" name="getAllVicePresidentsResponse"/>
</message>
<portType name="GAMEAssociateIntf">
<operation name="getAllVicePresidents">
<input message="tns:getAllVicePresidentsRequest"/>
<output message="tns:getAllVicePresidentsResponse"/>
</operation>
</portType>
<binding name="GAMEAssociateIntfBinding" type="tns:GAMEAssociateIntf">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getAllVicePresidents">
<soap:operation soapAction="http://www.xmlns.mycompany.com/GAME/wsdl/AssociateIntf/1.4/getAllVicePresidentsRequest"
style="document"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="GAMEAssociate">
<port binding="tns:GAMEAssociateIntfBinding" name="GAMEAssociateSOAP">
<soap:address location="http://localhost:8014/associateservice/GAMEAssociate.svc"/>
</port>
</service>
</definitions>
ссылки:
- WSDL - нет ввода-лучший практика
- что означает эта ошибка WCF: "предупреждение пользовательского инструмента: не удается импортировать wsdl: portType"
- написание контракта веб-службы wsdl 1.1 вручную
- Написание Контракта-Первые Веб-Сервисы
- создать код сервера wcf из WSDL-файлов
- как получить имена ввода и вывода wsdl, чтобы появиться
- Inline Схема
- ручной прокат мыло запрос
3 ответов
Я потратил некоторое время, пытаясь выяснить проблемы. Ваш раздел
<types>
<schema targetNamespace="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="myData">
<complexType/>
</element>
<element name="myDataResponse">
<complexType/>
</element>
</schema></types>
обновление
на основе разговора ниже. Добавлено .
<element name="myDataResponse" nillable="true">
<complexType/>
</element>
запрос
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/">
<soapenv:Header/>
<soapenv:Body>
<ns:myData/>
</soapenv:Body>
</soapenv:Envelope>
ответ
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<myDataResponse xsi:nil="true" xmlns="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/"/>
</s:Body>
</s:Envelope>
wsi.org имеет набор инструментов проверки, которые, безусловно, стоит попробовать.
дополнительным преимуществом использования этих инструментов является то, что вы можете фактически утверждать, что соответствуете спецификации(спецификациям) WSDL.
Я говорил Встроенные Схемы. Благодаря @Indoknight также. Рабочий контракт WSDL приведен ниже.
Note1: префикс xsd и targetNamespace есть в схеме, которая используется внутри wsdl type
Note2: nillable= "true" применяется для типа, используемого в ответном сообщении
Note3: если вы получаете следующее исключение, убедитесь, что soapAction
точно такой же в контракте WSDL и WSDL, сгенерированном из WCF услуга. Некоторые инструменты, используемые для создания кода службы, могут изменять действие SOAP по собственной воле.
Faultcod:a: ActionNotSupported
Faultstring: сообщение с действием 'http://www.xmlns.mycompany.com/GAME/wsdl/AssociateIntf/1.4/getAllVicePresidentsRequest"не может быть обработан в приемнике из-за несоответствия фильтра контракта в EndpointDispatcher. Это может быть из-за несоответствия контракта (несоответствие действий между отправитель и получатель) или несоответствие привязки/безопасности между отправителем и получателем. Убедитесь, что отправитель и получатель имеют одинаковый контракт и одинаковую привязку (включая требования безопасности, например, сообщение, транспорт, Нет).
SOAP Action-контракт WSDL
<soap:operation soapAction="http://www.xmlns.mycompany.com/GAME/wsdl/AssociateIntf/1.4/getAllVicePresidentsRequest"
WSDL, генерируемый действием SOAP
<soap:operation soapAction="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/IGAMEAssociateIntf/getAllVicePresidents"
контракт Язык WSDL
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="GAMEAssociate"
targetNamespace="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/"
xmlns:tns="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsp="http://www.w3.org/ns/ws-policy"
>
<types>
<xsd:schema targetNamespace="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="myData">
<xsd:complexType />
</xsd:element>
<xsd:element name="myDataResponse" nillable="true">
<xsd:complexType />
</xsd:element>
</xsd:schema>
</types>
<message name="getAllVicePresidentsRequest">
<part element="tns:myData" name="getAllVicePresidentsRequest"/>
</message>
<message name="getAllVicePresidentsResponse">
<part element="tns:myDataResponse" name="getAllVicePresidentsResponse"/>
</message>
<portType name="GAMEAssociateIntf">
<operation name="getAllVicePresidents">
<input message="tns:getAllVicePresidentsRequest"/>
<output message="tns:getAllVicePresidentsResponse"/>
</operation>
</portType>
<binding name="GAMEAssociateIntfBinding" type="tns:GAMEAssociateIntf">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getAllVicePresidents">
<soap:operation soapAction="http://www.xmlns.mycompany.com/GAME/wsdl/AssociateIntf/1.4/getAllVicePresidentsRequest"
style="document"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="GAMEAssociate">
<port binding="tns:GAMEAssociateIntfBinding" name="GAMEAssociateSOAP">
<soap:address location="http://localhost:8014/associateservice/GAMEAssociate.svc"/>
</port>
</service>
</definitions>
запрос
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/">
<soapenv:Header/>
<soapenv:Body>
<ns:myData/>
</soapenv:Body>
</soapenv:Envelope>
ответ
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<myDataResponse xsi:nil="true" xmlns="http://www.xmlns.mycompany.com/GAME/service/Associate/1.1/"/>
</s:Body>
</s:Envelope>