Web Services Quiz: Issue 7 – the Answer


The answer to Issue 7 is the following:


 


<wsdl:binding name=”CalculatorSoap” type=”tns:CalculatorPortType”>


   <soap:binding style=”rpc” transport=”http://schemas.xmlsoap.org/soap/http”/>


   <wsdl:operation name=”Add”>


      <soap:operation soapAction=”uri.test.com/add”/>


      <wsdl:input>


         <soap:body parts=”AddRequest” use=”literal”/>


      </wsdl:input>


      <wsdl:output>


         <soap:body parts=”AddResponse” use=”literal”/>


      </wsdl:output>


   </wsdl:operation>


</wsdl:binding>


 


Please note that the soap binding is rpc-literal and not document/literal.


 


Here is the explanation why:


Because the provided WSDL messages AddRequestMsg and AddResponseMsg are referenced as types (instead as elements), only rpc bindings are possible.


 


   <wsdl:message name=”AddRequestMsg”>


      <wsdl:part name=”AddRequest” type=”tns:AddRequestType” />


   </wsdl:message>


 


   <wsdl:message name=”AddResponseMsg”>


      <wsdl:part name=”AddResponse” type=”tns:AddResponseType” />


   </wsdl:message>


 


 


But let’s look at the corresponding WS-I BP 1.0 rules:


 


R2203 An rpc-literal binding in a DESCRIPTION MUST refer, in its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the type attribute.


R2204 A document-literal binding in a DESCRIPTION MUST refer, in each of its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the element attribute.


 


Because the provided messages use the type attribute to define their parts, we have to define an rpc-literal binding to be compliant with the WS-I BP 1.0.


This leads me straight to Issue 8 – Dealing with rpc-literal in a.NET environment.

Comments (0)