Sometimes you need a WSE3 client to send an MTOM-encoded request, but accept either an MTOM or non-MTOM response. While the WSE3 server classes support "MTOM optional", the client does not. Here's a quick solution to the problem.
Assume you have generated your WSE3 web service proxy class. Normally you would set the
RequireMtom
property
true
on that object and make the call; but WSE3 then requires an MTOM-encoded response. With this trick, you can accept either.
Define a new class that inherits from your WSE3 proxy object with a single override method
GetWebResponse
:
using System.Net;
class MyNewWebServiceProxy : MyWSE3GeneratedProxyClass
{
protected override WebResponse GetWebResponse(WebRequest request)
{
WebResponse response = base.GetWebResponse(request);
if (response.Headers[HttpResponseHeader.ContentType].ToLower().StartsWith("text/xml"))
{
this.RequireMtom = false;
}
return response;
}
}
Now instead of creating an instance of the WSE3 proxy, create an instance of this one and set the
RequireMtom true
before calling your MTOM web method.
The gotcha is you need to remember to reset the
RequireMtom
on the proxy back to
true
before making another call on the same proxy instance if the next method call also needs MTOM.
-- Darren DeLoach