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.