Solved

Passing XMLdocument to webservice method

Posted on 2009-07-01
5
1,588 Views
Last Modified: 2012-06-27
Hello expert,

I have a webservice created using asp.net/C#. The method in the webservice takes one input parameter as type object.

From my asp.net web application , i am calling the web service and passing a XML document to the webmethod.

It is throwing a error.

Here is my web service code:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;

namespace PCWebApplication
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            PCWebService.Service1 PCWS = new PCWebService.Service1();

            XmlDocument doc = new XmlDocument();
            doc.Load("C:\\Temp\\Test.xml");

            /// Call to web service:
            object result;
           
            result= (object) PCWS.ProcessXMLFile(doc);

            Response.Write((string) result);

        }
    }
}

---------------------------------------------------

Here is my calling code from asp.net web application:

 protected void Page_Load(object sender, EventArgs e)
        {
            PCWebService.Service1 PCWS = new PCWebService.Service1();

            XmlDocument doc = new XmlDocument();
            doc.Load("C:\\Temp\\Test.xml");

            /// Call to web service:
            object result;
           
            result= (object) PCWS.ProcessXMLFile(doc);

            Response.Write((string) result);

        }

------------------------------------------------------------
Error Message: The type System.Xml.XmlDocument may not be used in this context.

any help?

0
Comment
Question by:mani_sai
  • 3
  • 2
5 Comments
 
LVL 8

Author Comment

by:mani_sai
ID: 24757040
Sorry here is my web service code:

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Xml;
using System.Text;
namespace PCWebService
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public string ProcessXMLFile(object doc)
{
/// process doc as a local variable
///
// Get the root node so we can explore its children
XmlDocument newxml = new XmlDocument();
newxml = (XmlDocument) doc;
string stroutput = newxml.DocumentElement.FirstChild.InnerText;
// Store all the values of the elements in a string
//string allMyChildren = nodRoot.InnerText;
return stroutput;

}
 
}
}
0
 
LVL 21

Accepted Solution

by:
MogalManic earned 500 total points
ID: 24761894
This will NEVER work.  Only classes that are marked [Serializable] can be passed as parameters in a web service.  The XmlDocument class is NOT serializable.

Here is an article on how serialization works:
  http://www.15seconds.com/issue/020903.htm

Web services usually use SoapSerialization which is XML.  Your best bet is to pass the XML as a string and reload the XML on the server.  So your code would be something like this:
client:
            PCWebService.Service1 PCWS = new PCWebService.Service1();

            XmlDocument doc = new XmlDocument();
            doc.Load("C:\\Temp\\Test.xml");

            /// Call to web service:
            object result;
           
            result= (object) PCWS.ProcessXMLFile(doc.DocElement.OuterText);
server:


[WebMethod]

public string ProcessXMLFile(String doc)

{

/// process doc as a local variable

///

// Get the root node so we can explore its children

XmlDocument newxml = new XmlDocument();

newxml.LoadXml(doc);

string stroutput = newxml.DocumentElement.FirstChild.InnerText;

// Store all the values of the elements in a string

//string allMyChildren = nodRoot.InnerText;

return stroutput;
 

} 

Open in new window

0
 
LVL 8

Author Closing Comment

by:mani_sai
ID: 31598897
Thanks
0
 
LVL 8

Author Comment

by:mani_sai
ID: 24790755
When you pass XML as string, is there a size limitation, if yes how much is the limit?
0
 
LVL 21

Expert Comment

by:MogalManic
ID: 24793013
I don't think so.  The only limitation would be the total max length.  Currently the default max length is 4K.  If you want to increase that amount you need to include a HTTPRuntime element in your web config:
http://msdn.microsoft.com/en-us/library/e1f13641%28VS.71%29.aspx
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Suggested Solutions

Today is the age of broadband.  More and more people are going this route determined to experience the web and it’s multitude of services as quickly and painlessly as possible. Coupled with the move to broadband, people are experiencing the web via …
A quick way to get a menu to work on our website, is using the Menu control and assign it to a web.sitemap using SiteMapDataSource. Example of web.sitemap file: (CODE) Sample code to add to the page menu: (CODE) Running the application, we wi…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now