Я думаю, что вы ссылались на неправильный пример, речь шла о порте под тегом сервиса. Нечто подобное,
<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.
Большое спасибо :) У меня мало сомнений, пожалуйста, уточните. (1) Адрес в этом примере - это URL-адрес, поэтому может ли он иметь какое-либо значение, например 'http: // myhost/testing', или нам нужно следовать некоторому процессу? (2) Здесь soapAction также является URL-адресом, поэтому у меня есть такие же сомнения, какие у меня есть для адреса. (3) Если я разрабатываю службу в Java-программировании, то у нас есть классы, определенные в пакете Java, поэтому, где структура пакета входит в этот WSDL? – Chaitanya
В вашем классе издателя, в котором вы публикуете URL-адрес конечной точки, вы можете определить любой адрес согласно вашему требованию. Действие SOAP может быть url, это может быть как «имя_пакета/имя метода» или строка типа «getQuote», «login» и т. Д. Что угодно. Я правильно отредактирую свой ответ на третий вопрос. – kingAm
Я отредактировал ответ. – kingAm