在c#webservice中读取发布的XML文件

在c#webservice中读取发布的XML文件,c#,web-services,post,xml-parsing,C#,Web Services,Post,Xml Parsing,我对c#中的Web服务非常陌生 我使用以下功能将XML发布到web服务中: public static XmlDocument PostXMLTransaction(string URL, XmlDocument XMLDoc) { //Declare XMLResponse document XmlDocument XMLResponse = null; //Declare an HTTP-specific implem

我对c#中的Web服务非常陌生

我使用以下功能将XML发布到web服务中:

public static XmlDocument PostXMLTransaction(string URL, XmlDocument XMLDoc)
        {
            //Declare XMLResponse document
        XmlDocument XMLResponse = null;

        //Declare an HTTP-specific implementation of the WebRequest class.
        HttpWebRequest objHttpWebRequest;

    //Declare an HTTP-specific implementation of the WebResponse class
    HttpWebResponse objHttpWebResponse = null;

    //Declare a generic view of a sequence of bytes
    Stream objRequestStream = null;
    Stream objResponseStream = null;

    //Declare XMLReader
    XmlTextReader objXMLReader;

    //Creates an HttpWebRequest for the specified URL.
    objHttpWebRequest = (HttpWebRequest)WebRequest.Create(URL);

    try
    {
        //---------- Start HttpRequest

        //Set HttpWebRequest properties
        byte[] bytes;
        bytes = System.Text.Encoding.ASCII.GetBytes(XMLDoc.InnerXml);
        objHttpWebRequest.Method = "POST";
        objHttpWebRequest.ContentLength = bytes.Length;
        objHttpWebRequest.ContentType = "text/xml; encoding='utf-8'";

        //Get Stream object
        objRequestStream = objHttpWebRequest.GetRequestStream();

        //Writes a sequence of bytes to the current stream
        objRequestStream.Write(bytes, 0, bytes.Length);

        //Close stream
        objRequestStream.Close();

        //---------- End HttpRequest

        //Sends the HttpWebRequest, and waits for a response.
        objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();

        //---------- Start HttpResponse
        if (objHttpWebResponse.StatusCode == HttpStatusCode.OK)
        {
            //Get response stream
            objResponseStream = objHttpWebResponse.GetResponseStream();

            //Load response stream into XMLReader
            objXMLReader = new XmlTextReader(objResponseStream);

            //Declare XMLDocument
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(objXMLReader);

            //Set XMLResponse object returned from XMLReader
            XMLResponse = xmldoc;

            //Close XMLReader
            objXMLReader.Close();
        }

        //Close HttpWebResponse
        objHttpWebResponse.Close();
    }
    catch (WebException we)
    {
        //TODO: Add custom exception handling
        throw new Exception(we.Message);
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
    finally
    {
        //Close connections
        objRequestStream.Close();
        objResponseStream.Close();
        objHttpWebResponse.Close();

        //Release objects
        objXMLReader = null;
        objRequestStream = null;
        objResponseStream = null;
        objHttpWebResponse = null;
        objHttpWebRequest = null;
    }
    //Return
    return XMLResponse;
}
现在,我如何将此XML读入url参数指定的Web服务中的XmlDocument。我不确定是否可以将数据发布到Web服务,如果我错了,请更正我


我使用此方法将xml发布到aspx页面,但不发布服务。

下面是读取xml文档的简单示例。如果是单个节点,则使用

如果是节点列表,则使用

我找到了解决办法

[WebMethod]
public string sendXliff()
{
    XmlDocument xmldoc = new XmlDocument();
    //if (Request.InputStream != null)
    if(HttpContext.Current.Request.InputStream!=null)
    {

        StreamReader stream = new StreamReader(HttpContext.Current.Request.InputStream);
        string xmls = stream.ReadToEnd();  // added to view content of input stream
        //XDocument xmlInput = XDocument.Parse(xmls);
        xmldoc.LoadXml(xmls);
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.Schemas.Add(null, "XSD LOCATION");
        settings.ValidationType = ValidationType.Schema;
        XmlReader rdr = XmlReader.Create(new StringReader(xmldoc.InnerXml), settings);
        while (rdr.Read()) { }
    }
    try
    {
        XmlNodeList xmlnode = xmldoc.GetElementsByTagName("ID");
        var sid = xmlnode[0].FirstChild.Value;
    }
    catch (Exception ex)
    {
    }

    return "OK";
}

这将读取输入流,然后将读取的数据转换为XmlDocument。然后从这里我可以解析XML。

谢谢,我需要这个,但我想知道如何在Web服务中阅读这个发布的XML文档。你是什么意思?您想在响应后阅读一次吗?不要在响应后阅读,因为您可以看到我正在将一个XML文件发布到web服务中,我需要在服务中阅读此XML。感谢@DON的回复,我得到了解决方案,我已将其添加为答案。我有一个自定义web服务,我将数据发布到该服务。所以我想阅读这个Web服务中发布的XML。你能告诉我如何指定XML节点路径吗?这将是非常有益的
XmlNodeList nodes = xmlDoc.SelectNodes("you xml node path here");
if(nodes != null)
{
    foreach (XmlNode node in nodes)
    {
         --code here
    }
}
[WebMethod]
public string sendXliff()
{
    XmlDocument xmldoc = new XmlDocument();
    //if (Request.InputStream != null)
    if(HttpContext.Current.Request.InputStream!=null)
    {

        StreamReader stream = new StreamReader(HttpContext.Current.Request.InputStream);
        string xmls = stream.ReadToEnd();  // added to view content of input stream
        //XDocument xmlInput = XDocument.Parse(xmls);
        xmldoc.LoadXml(xmls);
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.Schemas.Add(null, "XSD LOCATION");
        settings.ValidationType = ValidationType.Schema;
        XmlReader rdr = XmlReader.Create(new StringReader(xmldoc.InnerXml), settings);
        while (rdr.Read()) { }
    }
    try
    {
        XmlNodeList xmlnode = xmldoc.GetElementsByTagName("ID");
        var sid = xmlnode[0].FirstChild.Value;
    }
    catch (Exception ex)
    {
    }

    return "OK";
}