获取XML文档发送

时间:2011-03-28 19:42:22

标签: c# xml http-post

我有2个项目 - 1个纯粹只是一个.ashx通用处理程序,另一个是一个测试项目,它向它发布XML文档。如何获取已发布的XML文档?

客户端代码(为简洁起见缩短)

    string xmlToSend = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><APPLICATION>  <TRANSACTIONTYPE>12</TRANSACTIONTYPE></APPLICATION>";
    WebRequest webRequest = WebRequest.Create(new Uri("http://localhost:8022/handle.ashx"));
    webRequest.ContentType = "text/xml";
    webRequest.Method = "POST";
    byte[] bytes = Encoding.ASCII.GetBytes(xmlToSend);
    Stream os = null;
    webRequest.ContentLength = bytes.Length;
    os = webRequest.GetRequestStream();
    os.Write(bytes, 0, bytes.Length);
    os.Close();
    WebResponse webResponse = webRequest.GetResponse();
    //if (webResponse == null)
    //{ return null; }
    StreamReader sr = new StreamReader(webResponse.GetResponseStream());
    string sRet = "";
    sRet = sr.ReadToEnd().Trim();

接收代码是

public void ProcessRequest(HttpContext context)
{
    // Well, not sure what to do here.  
    // context.Request.Params has a count of 48, but doesn't have the XML.
    // context.Request.Form has a count of 0

}

我知道我在这里缺少一些基本的东西。但我无法弄清楚我的生活。

请不要建议使用WCF,除非这是我要让它工作的唯一方法。我发现WCF非常困难而且挑剔起来。

我甚至无法让我的处理程序在我的断点上中断,但我知道它正被调用(我已多次更改它以返回日期,日期和时间,我输入的一些乱码字符串,所以我知道它正在被调用并且可以回复。)

2 个答案:

答案 0 :(得分:1)

context.Request.InputStream包含您要查找的数据。

微软的例子:

System.IO.Stream str; String strmContents;
Int32 counter, strLen, strRead;
// Create a Stream object.
str = Request.InputStream;
// Find number of bytes in stream.
strLen = Convert.ToInt32(str.Length);
// Create a byte array.
byte[] strArr = new byte[strLen];
// Read stream into byte array.
strRead = str.Read(strArr, 0, strLen);

// Convert byte array to a text string.
strmContents = "";
for (counter = 0; counter < strLen; counter++)
{
    strmContents = strmContents + strArr[counter].ToString();            
}

使用StreamReader等文本或使用StringBuilder进行连接时,还有其他更好的方法。

答案 1 :(得分:0)

public void ProcessRequest(HttpContext context)
{
   string data = new StreamReader(context.Request.InputStream).ReadToEnd();
}