More on using the SOAP adapter without a web reference
Every now and then I am drawn to implement a call to a web service using the SOAP adapter and without adding a web reference.
Last time I had to do this, though, a couple of months ago, I bumped into a puzzling error, which took some time to understand.
In the scenario I had I needed to modify the message in the pipeline, and - being the good citizen that I am (?) - my pipeline component created a new message and did not return the same message it had received.
When my message hit the adapter it got suspended with the error -
Failed to load "" type.
Please verify the fully-qualified type name is valid.
The type must derive from System.Web.Services.Protocols.SoapHttpClientProtocol.
The type must have the attribute System.Web.Services.WebServiceBindingAttribute.
In my scenario the proxy was provided for the SOAP adapter via its configuration in the send port explicitly as per Richard’s post, so I was very confused about the empty type definitions in the error message.
Some investigation revealed the cause – the send port configuration is read at the beginning of the pipeline and these settings are set in the outgoing message’s context.
My pipeline component created a new message and did not copy these properties to the new message, so when it arrived at the adapter, which tries to read them, the empty definitions were found.