Groups | Blog | Home
all groups > asp.net webservices > august 2007 >

asp.net webservices : Preventing Escapes in Post



SevDer
8/26/2007 2:49:15 AM
Hi,

I am trying to consume the webservice which is written with Java through the
provided wsdl & xsd definitions.
However there is a slight problem.

Problem is, they are expecting a clean XML but .NET converts my query XML
into escaped form into the SOAP body which makes their service to respond in
the following form:

<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server.userException</faultcode><faultstring>java.lang.IndexOutOfBoundsException:
Index: 0, Size: 0</faultstring><detail><ns1:hostname
xmlns:ns1="http://xml.apache.org/axis/">trajanoxp</ns1:hostname></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>


Now my question is: Is there a way to prevent this escaping? Or I must write
all the soap from string and send the whole XML string manually?

Thanks for your help in advance.

--

SevDer
www.sevder.com
John Saunders [MVP]
8/26/2007 1:13:38 PM
[quoted text, click to view]

Obviously, this is not something that .NET does on its own, or everyone
would have this problem. This obviously has to do with the way that you are
using .NET.

Please tell us how you are producing the XML.

Also, is there a reason that you didn't just consume the web service by
using Add Web Reference in Visual Studio?
--
John Saunders [MVP]
SevDer
8/26/2007 3:15:40 PM
Hello John,

Thanks for the reply.

I think you should check this again. I've learned that .NET actually escapes
the inner XML to prevent bad XML forming on some cases. And as far as I
learned this is the behavior of .NET not the way that I use.
Additionally the otherway around problem is there too. For your webservice
to work with other applications, you will need to escape all received inner
XMLs as they (like Java) send it as nonescaped form.

Also I added as web reference and I am trying to make the webreference to
work not any other way. If I cannot make this working, then I will have to
POST using regular HTTP Post and not use wsdl reference.

And their WSDL defined method calls does not accept structured objects but
simple and generic object which actually is simple XML.

The bottom line is, I am just trying to learn if there is a way for .NET to
not to escape my request XML while sending over!

--

Sevket Seyalioglu
CTO
www.kbstours.com
[quoted text, click to view]
John Saunders [MVP]
8/26/2007 9:14:58 PM
[quoted text, click to view]

I promise you that, as a general rule, .NET doesn't prevent people from
using XML by escaping it. You are clearly using it in a way that other
developers do not use it - they are succeeding and you are failing.

Please post some code showing us how you are using XML. Among other things,
your mention of "inner xml" is frightening. You are doing something very
strange.

Please look at some of the following links on Web Service basics.

Overview of XML Web services:

http://msdn2.microsoft.com/en-us/library/7bkzywba.aspx



A walkthrough of building a basic XML Web service:

http://msdn2.microsoft.com/en-us/library/7hs6sw69.aspx



A walkthrough of building a basic client application:

http://msdn2.microsoft.com/en-us/library/hk7y1596.aspx



Serializing objects with XML web services

http://msdn2.microsoft.com/en-us/library/564k8ys4.aspx
--
John Saunders [MVP]

stcheng NO[at]SPAM online.microsoft.com
8/27/2007 12:00:00 AM
Thanks for John's input.

Hello SevDer,

I agree that the problem should be quite specific to the service and its
requirement on the SOAP message format. Would you provide some further
information on the service(such as the format and structure of the SOAP
message it expects from client). Normally, for any string value inside XML
document(include SOAP envelope), it have to escape those special characters
so as to ensure the validity of the document. If the customzation requests
for your scenario does be reasonable, we may look for some ways to
customize the client proxy class.

Please feel free to post here if there is anything we've missed.

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead



==================================================

Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.



Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.

==================================================


This posting is provided "AS IS" with no warranties, and confers no rights.



--------------------
[quoted text, click to view]
<OiPtxRA6HHA.4584@TK2MSFTNGP03.phx.gbl>
<7267F6E2-FD37-4E29-84F2-55937C3B6D13@microsoft.com>
[quoted text, click to view]
KBSTours
8/27/2007 9:54:31 PM
Hi Steven,

The webservice (not the native .NET webservice) which is written in Java is
expecting the string in XML format without being escaped. Its not my
service, I am just trying to consume it.
So how can I customize it in the proxy class?

What are the basics? Are there any samples or guides?

--


CTO
www.kbstours.com
[quoted text, click to view]
KBSTours
8/27/2007 9:57:55 PM
Hi John,

It is not my first time using webservices.
Please see Stevens comments too. He clearly mentions that .NET needs to do
this escaping as a safe guard which I am trying to prevent. And this is not
an issue when both ends are .NET code but when one of the end is not .NET
like Java then you have a problem.

I've spent good amount of time to see where I fail and finally find this out
by writing the TraceExtension to the webservice call.

So if you can find anything for this, please let me know.

Thanks

--


CTO
www.kbstours.com
[quoted text, click to view]
John Saunders [MVP]
8/28/2007 8:29:56 AM
[quoted text, click to view]

You have misread Steven's post. The escaping he's referring to is within
text nodes. That is, within an attribute value or within the text value of
an element. For instance:

<element attr="&lt;x&gt;">Includes &quot;&amp;&quot;</element>

The main portion of your SOAP messages should not be getting escaped. If it
is, then you are doing something very unusual.

As a hint: note that there are many questions about web services on this
newsgroup, and yet no questions about how to not escape SOAP messages. Your
problem must be unique to your code.

Please post some of your code, so we can see what is going on. In
particular, if you can create a smaller example that reproduces what you're
seeing, and then if you could post the WSDL and client code for that smaller
example, then we'd be able to see what you're doing to produce escaped XML.
Without that, we're just guessing.

And, please let me reiterate that this may very well have to do with the
fact that you are manipulating OuterXml. It should be unnecessary to deal
with the string representation of XML in a web service.


Here are some basic references on Web Services in .NET:

Overview of XML Web services:
http://msdn2.microsoft.com/en-us/library/7bkzywba.aspx

A walkthrough of building a basic XML Web service:
http://msdn2.microsoft.com/en-us/library/7hs6sw69.aspx

A walkthrough of building a basic client application:
http://msdn2.microsoft.com/en-us/library/hk7y1596.aspx

Serializing objects with XML web services
http://msdn2.microsoft.com/en-us/library/564k8ys4.aspx

--
John Saunders [MVP]
stcheng NO[at]SPAM online.microsoft.com
8/29/2007 12:00:00 AM
Thanks for the reply,

So based on your further description, I know that the java webservice
actually expect a webservice SOAP message which contains an XML fragment
(which is not escaped) as part of the SOAP body itself. I'm afraid this
doesn't quite conform to XML webservice standard. Because for any method's
data(parameters or return value) ,if it contains particular charaters, it
should be escaped. For example, the SOAP body xml document is used to
represent a request message of a method call, however, if your parameters
data is a XML fragment and not escaped, how can we know which part of the
xml document is the method body and which part are parameters data?

Therefore, for the scenario here, I think it would be better to manually
post the XML soap message through some network components such as
HttpWebRequest as it can let you freely control the underlying tranfered
message data. How do you think?

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no rights.


--------------------
[quoted text, click to view]
KBSTours
8/29/2007 10:11:48 PM
Thanks Steven,

I was actually looking for answer and you've given that to me.
At least I do not need to look for more.

I also during that time, given up and started developing by my own posting
as I didn't see any chance.

Thanks for the information.

--


CTO
www.kbstours.com
[quoted text, click to view]
stcheng NO[at]SPAM online.microsoft.com
8/30/2007 12:00:00 AM
Thanks for your followup,

It's a pity that we can not do more here with the built-in features. Also,
through XML webservice is designed to provide heterogenious platform
interop and recommend document-literal and WSDL/SOAP restricted message
formats, there are still many realworld services which do not quite conform
to that, that makes the interop difficult :(.

Anyway, if you need any further help later, please feel free to post here.

Thanks for your posting!

Sincerely,

Steven Cheng

Microsoft MSDN Online Support Lead


This posting is provided "AS IS" with no warranties, and confers no rights.


--------------------
[quoted text, click to view]
<OiPtxRA6HHA.4584@TK2MSFTNGP03.phx.gbl>
<7267F6E2-FD37-4E29-84F2-55937C3B6D13@microsoft.com>
<O0UuveE6HHA.1148@TK2MSFTNGP05.phx.gbl>
<X#gO#$F6HHA.4200@TK2MSFTNGHUB02.phx.gbl>
<91A8CA6E-D03E-4179-8CF2-6EA84BEB5D1F@microsoft.com>
<JlIX0me6HHA.5608@TK2MSFTNGHUB02.phx.gbl>
[quoted text, click to view]
AddThis Social Bookmark Button