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

C# dictionary key split to JSON key value?
Injecting C++ DLLs into notepad on windows 10 using C#
DLL Could not be found in the project folder
C# Append text with Encoding.UTF8
abstract class with more then one parameterized constructor and derived class with parameterized constructor
image are not view in full screen in convert pdf time
New controller validation error due to no PK on inherited classes ASP.NET MVC VS2015
C# Console Application: Catching Some Cases of White Spaces
XmlElementAttribute not added by xsd.exe
Synchronize events in an Outlook calendar view
C# label text not change in method
How can I get checkboxes not in datagrid selected based on database value Y and N?
Deserialize Single Dimension JSON Array C#
Can Outlook Notes(memo) add Item on VSTO(C#)?
Return data from self loopoing method in C#
Add row in GridControl Devexpress onClick

Categories

HOME
skype-for-business
stanford-nlp
mobile
x86-64
singleton
ms-access-2010
hibernate-mapping
digital
elastalert
distinct
websharper
xmlhttprequest
eclipse-orion
sha1
web-parts
civicrm
udeploy
bootstrap-datetimepicker
android-navigation-drawer
aws-iot
my.cnf
utc
uibarbuttonitem
meteor-accounts
emr
sphinx4
openoffice-impress
vtd-xml
schedule
deferred
contextmenustrip
fastadapter
javax
android-databinding
extern
stencyl
google-cloud-powershell
datagridviewcombobox
spring-webflow-2
togglebutton
g77
e4
node-java
aws-rds
androiddesignsupport
grib
indoor-positioning-system
symantec
foreground
deck.js
syslog4j
nimbus
bytearray
kik
avaudiorecorder
transaction-isolation
boost-propertytree
video-embedding
ewam
android-togglebutton
winforms-interop
azure-mobile-app
sparkcore
nmock
polarion
stderr
mergecursor
conkeror
lwuit
nsnotificationcenter
episerver-7
azure-caching
nodeunit
html5-filesystem
node-mongodb-native
xtify
mahara
google-mirror-api
violation
wpd
mosix
nsautoreleasepool
microsoft-speech-platform
qt5.1
jquery-ui-map
datejs
copyfile
virtual-printer
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