2011-03-28 91 views
2

我有2個項目 - 1純粹只是一個.ashx通用處理程序,另一個是將XML文檔發佈給它的測試項目。如何獲取已發佈的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非常困難和挑剔的起牀和去。

我甚至不能讓我的處理程序,以我的斷點打破,但我知道,它被稱爲(我已經多次改變它返回的日期,時間和日期,一些亂碼字符串我輸入,所以我知道它被稱爲並可以迴應。)

+0

只是想指出的是,WebRequest.Create應包含一個URI來完成,喬資源http://msdn.microsoft.com/en-us/library/bw00b1dc.aspx – Joe 2011-03-28 19:52:05

+0

。雖然我覺得自己被騙了,因爲我剛剛使用「新的Uri」,並將我的網址作爲構造函數傳遞給它。不知道它給了我什麼,但是,嘿,它完成了。 – 2011-03-28 19:59:43

+0

@Matt:這不是一個有效的URI。我確信代碼會立即拋出異常。 – 2011-03-28 20:00:48

回答

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還有其他更好的辦法。

+0

非常好。感謝你的回答。我縮短了它(根據你的建議): System.IO.Stream輸入; 字符串內容; input = context.Request.InputStream; System.IO.StreamReader reader = new StreamReader(input); contents = reader.ReadToEnd(); – 2011-03-28 20:59:47

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

雖然此代碼可能會回答問題,但提供關於此代碼爲何和/或如何回答問題的其他上下文可提高其長期價值。 – ryanyuyu 2015-09-03 15:10:52