c#


C# client of Axis2 web service complains “but expected 'text/xml'”


My C# sample client ASP.NET program successfully runs a call in my Axis2 server but the client does not seem to like the response.
I get:
Client found response content type of 'multipart/related;
boundary=MIMEBoundaryurn_uuid_38D413ACFC9D56F28E1258666845186;
type="application/xop+xml";
start="<0.urn:uuid:38D413ACFC9D56F28E1258666845187#apache.org>";
start-info="text/xml"', but expected 'text/xml'.
According to the MSDN forums I supposedly must enable MTOM but they only explain this for the now-obsolete WSE 3 package.
In the WCF space, for an ASP.NET program in C#, how to I enable MTOM or otherwise fix this response content-type mismatch? Actually, I'll need MTOM next.
For one thing, you have to enable MTOM in Axis2 as well. Find your axis2.xml configuration file (WEB-INF/conf/axis2.xml) and adjust the following setting:
<axisconfig name="AxisJava2.0">
<!-- ================================================= -->
<!-- Parameters -->
<!-- ================================================= -->
.../...
<parameter name="enableMTOM">true</parameter>
.../...
</axisconfig>
Wihthout this, Axis will not handle MTOM at all and the client will be very confused.
Switching to XOP/MTOM means switching to multipart-mime as well, and your client actually got a multipart-mime answer, so I suppose the Axis2 setting is OK afterall :) The fact that your client is expecting plain XML (i.e. a nice SOAP response) indicates that you have not set up MTOM on the client side.
Supposing you are using a BasicHttpBinding, enabling MTOM in WCF could be done as:
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MySOAP11Binding"
...
messageEncoding="Mtom"
...
>
.../...
</binding>
</basicHttpBinding>
.../...
You will most certainly have to tweak the maxBufferSize, maxBufferPoolSize and maxReceivedMessageSize attributes of the binding element as well.
Alternatively, you can set this up in code:
private ServiceProxy<MyPortTypeClient, MyPortType> getClient()
{
EndpointAddress endpoint = new EndpointAddress("http://server/axis/services/My");
// The binding
BasicHttpBinding binding = new BasicHttpBinding();
binding.OpenTimeout = minutes(1);
binding.CloseTimeout = minutes(1);
binding.SendTimeout = minutes(10);
binding.ReceiveTimeout = minutes(10);
binding.MaxBufferPoolSize = Int32.MaxValue;
binding.MaxReceivedMessageSize = Int32.MaxValue;
binding.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
binding.MessageEncoding = WSMessageEncoding.Mtom;
if (binding is BasicHttpBinding)
{
// Also setting to streamed mode
((BasicHttpBinding)(Object)binding).TransferMode = TransferMode.Streamed;
}
binding.AllowCookies = true;
// MyPortType and MyPortTypeClient are implemented in Reference.cs, i.e. this
// code is generated by svcutil or Visual Studio from your WSDL.
MyPortTypeClient _proxy = new MyPortTypeClient(binding, endpoint);
ServiceProxy<MyPortTypeClient, MyPortType> proxy = new ServiceProxy<MyPortTypeClient, MyPortType>(_proxy);
if (!String.IsNullOrEmpty(wsUsername) && !String.IsNullOrEmpty(wsPassword))
{
UserNamePasswordClientCredential credentials = _proxy.ClientCredentials.UserName;
credentials.UserName = wsUsername;
credentials.Password = wsPassword;
}
return proxy;
}
The nice thing about doing this in code, is that you will get help form your IDE regarding what parameters can be set for any specific binding. If you switch from BasicHttpBinding to, say, WSHttpBinding you will get compilation errors for those parameters that does not match the new binding.
This in normally that the client expects an xml response, but gets an error message from the server that it cannot parse.
Either log the reponse or use a network sniffer (fiddler) to check what you are getting back.

Related Links

toggle button visibility not working
Mocking RouteData to test HtmlHelper RouteLink
How to write a generic ISort interface?
Comparing Sum Methods in C#
Pass Linq Expression to a function
nHibernate stored procedure call
Invalid authorization specification and Invalid connection string attribute
How to bind list inside a list to a GridView in ASP.NET
How can I use a client certificate with a missing CA to communicate with a external Web service?
Registering and using forms with Windsor
Fast serialization/deserialization of structs
Sending UTF-8 Text Messages on C# using TIBCO EMS
Strategy, State, Singleton… or a Composition thereof?
Handling the events of a Interop control in C#
Regex to capture text around a literal
Why my TempData is not working

Categories

HOME
drupal
excel-formula
twitter-bootstrap
kendo-ui
domain-driven-design
popover
mifare
okhttp3
google-docs-api
rethinkdb
annyang
ios-universal-links
google-my-business-api
infopath
powerpivot
virtuemart
geography
orange
scotty
custom-component
git-branch
v4l2
ckeditor4.x
grunt-contrib-uglify
expressionengine
orgchart
cloudformation
multiple-inheritance
resx
boosting
meteor-accounts
kundera
arp
urhosharp
directions
epub
geocomplete
const
armadillo
mediastream
blueimp
pexpect
hdpi
history
noise
e4
visualizer
selection-sort
zedgraph
lattice
timefield
qudpsocket
alfred
x12
syslog4j
airwatch
laterjs
usps
music-player
containstable
datamodel
fadein
cascading
angular-promise
random-sample
pushwoosh
xml-simple
litedb
vspackage
data-representation
avd
skview
backtrace
qxorm
dojox.grid
jsonmodel
frisby.js
grunt-contrib-connect
qf-test
pnunit
disabled-control
email-headers
elixir-framework
ie-developer-tools
nokogiri
forward-declaration
asp.net-4.0
latex-suite
outlook-object-model
mysql2
gmail-imap
simplemembership
states
pinchzoom
code-organization
cgaffinetransform
virtual-printer
rjs
isgl3d
funambol
cryptolicensing
llblgen
mass-emails
cstring
cons
ironpython-studio
scalable

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App