2014-01-02 4 views
2

я изучаю WSDL using online documentation, для WSDLPorts упоминается, что:Подробная информация о WSDL Ports

Порт НЕ ДОЛЖНЫ указать более одного адреса.

Порт НЕ ДОЛЖЕН указывать любую информацию привязки, кроме адреса информации.

и пример, приведенный в:

<portType name="StockQuotePortType"> 
     <operation name="GetLastTradePrice"> 
      <input message="tns:GetLastTradePriceInput"/> 
      <output message="tns:GetLastTradePriceOutput"/> 
     </operation> 
    </portType> 

Что такое адрес в этом примере? также что это означает, что A port MUST NOT specify any binding information other than address information.? Пожалуйста, помогите мне в понимании понятий.

ответ

3

Я думаю, что вы ссылались на неправильный пример, речь шла о порте под тегом сервиса. Нечто подобное,

<wsdl:service name="StockQuote"> 
<wsdl:port name="StockQuoteSoap" binding="tns:StockQuoteSoap"> 
    <soap:address location="http://www.webservicex.net/stockquote.asmx" /> 
</wsdl:port> 
<wsdl:port name="StockQuoteSoap12" binding="tns:StockQuoteSoap12"> 
    <soap12:address location="http://www.webservicex.net/stockquote.asmx" /> 
</wsdl:port> 
<wsdl:port name="StockQuoteHttpGet" binding="tns:StockQuoteHttpGet"> 
    <http:address location="http://www.webservicex.net/stockquote.asmx" /> 
</wsdl:port> 
<wsdl:port name="StockQuoteHttpPost" binding="tns:StockQuoteHttpPost"> 
    <http:address location="http://www.webservicex.net/stockquote.asmx" /> 
</wsdl:port> 

Здесь вы можете увидеть адрес расположения этого конкретного веб-сервиса, т.е.

http://www.webservicex.net/stockquote.asmx 

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

Есть 4 порта или вы можете сказать 1 webservices, то есть StockQuote, но вы можете назвать это 4 различными способами в соответствии с привязками.

Привязки определяют формат сообщения и данные протокола для каждого порта. Например.

<wsdl:binding name="StockQuoteSoap" type="tns:StockQuoteSoap"> 
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
<wsdl:operation name="GetQuote"> 
    <soap:operation soapAction="http://www.webserviceX.NET/GetQuote" style="document" /> 
    <wsdl:input> 
    <soap:body use="literal" /> 
    </wsdl:input> 
    <wsdl:output> 
    <soap:body use="literal" /> 
    </wsdl:output> 
</wsdl:operation> 

Допустим, вы звоните StockQuote WebService, используя порт "StockQuoteSoap". Поэтому при отправке вашего запроса вы будете использовать ссылку выше, как указано в теге порта.

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 

http протокол транспорта и протокол обмена мылом.

<wsdl:binding name="StockQuoteSoap" type="tns:StockQuoteSoap"> 

ТНС: StockQuoteSoap ссылается на свой тип порта

<wsdl:operation name="GetQuote"> 

GetQuote Ваше имя операции.

Это больше волнует, как ваш веб-сервис реализован на стороне сервера для этой привязки. Вы можете рассматривать имя операции как имя метода и тип порта как имя класса в традиционном языке программирования.

Полный тип Difinition порт можно увидеть в качестве WSDL

<wsdl:portType name="StockQuoteSoap"> 
<wsdl:operation name="GetQuote"> 
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</wsdl:documentation> 
    <wsdl:input message="tns:GetQuoteSoapIn" /> 
    <wsdl:output message="tns:GetQuoteSoapOut" /> 
</wsdl:operation> 

Это означает, что GetQuote метод класса StockQuoteSoap будет выполняться на сервере для данного ввода и вывода сообщения в определении.

soap:operation soapAction="http://www.webserviceX.NET/GetQuote" style="document" /> 
    <wsdl:input> 
    <soap:body use="literal" /> 
    </wsdl:input> 
    <wsdl:output> 
    <soap:body use="literal" /> 
    </wsdl:output 

ваше связывание также определяет входной и выходной формат сообщения и стиль

SOAP Действие дополнительная функция, которая используется сервером для фильтрации входящего запроса.

(3) If I am developing a service in Java programming then we have classes defined in Java package, so where the package structure go in this WSDL? 

Давайте рассмотрим пример, в котором вы хотите опубликовать веб-сервиса в url "http://testhost:9999/ws/helloexample" в Java в пакете examplePackage.

У вас есть класс или интерфейс с именем sayHello, в котором вы определили метод public String helloWorld (String Name).

Вы публикуете этот класс, используя

Endpoint.publish("http://testhost:9899/ws/helloexample", new sayHello()); 

Таким образом, ваш генерируется WSDL будет отображаться, как показано ниже.

Interface or class name: PortType 
    Method name: Operation 
    Method name: input message (request) 
    Method name+Response: output message (response) 

<portType name="sayHello"> 
    <operation name="helloWorld"> 
     <input message="tns:helloWorld"/> 
     <output message="tns:helloWorldResponse"/> 
    </operation> 
</portType> 

    Endpoint.publish("http://testhost:9899/ws/helloexample",new sayHello()) 
    : address location 

    <wsdl:service name="sayHelloService"> 
    <wsdl:port name="sayHelloPort" binding="tns:sayHelloPortBinding"> 
    <soap:address location="http://testhost:9899/ws/helloexample" /> 
    </wsdl:port> 

Вы можете использовать различные аннотаций веб-сервиса, доступные как @WebParam, @WebMethod, @WebResult и т.д., чтобы изменить имя операции, сообщение название детали, пространства имен и т.д. в WSDL.

Далее addidng связывания в сгенерированном WSDL,

<wsdl:binding name="sayHelloPortBinding" type="tns:sayHello"> 
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
<wsdl:operation name="helloWorld"> 
<soap:operation soapAction="" style="rpc"/> 
<wsdl:input> 
<soap:body use="literal" namespace="http://examplePackage" /> 
</wsdl:input> 
<wsdl:output> 
<soap:body use="literal" namespace="http://examplePackage" /> 
</wsdl:output> 
</wsdl:operation> 

SOAPAction может быть установлен в @WebMethod аннотации. стиль может быть установлен в @SOAPBinding.

+0

Большое спасибо :) У меня мало сомнений, пожалуйста, уточните. (1) Адрес в этом примере - это URL-адрес, поэтому может ли он иметь какое-либо значение, например 'http: // myhost/testing', или нам нужно следовать некоторому процессу? (2) Здесь soapAction также является URL-адресом, поэтому у меня есть такие же сомнения, какие у меня есть для адреса. (3) Если я разрабатываю службу в Java-программировании, то у нас есть классы, определенные в пакете Java, поэтому, где структура пакета входит в этот WSDL? – Chaitanya

+0

В вашем классе издателя, в котором вы публикуете URL-адрес конечной точки, вы можете определить любой адрес согласно вашему требованию. Действие SOAP может быть url, это может быть как «имя_пакета/имя метода» или строка типа «getQuote», «login» и т. Д. Что угодно. Я правильно отредактирую свой ответ на третий вопрос. – kingAm

+0

Я отредактировал ответ. – kingAm

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