2010-09-25 81 views
1

非常感謝您花時間閱讀我的文章!我在從C#Desktop應用程序將數據發佈到C#asp.net網頁時遇到問題。我相信問題在於桌面應用程序(或者至少有一個問題!)我還會發布我正在使用的asp.net代碼。如果asp.net不是你的專長,不要擔心,我只是想知道在那裏是否有明顯的表現。將數據發佈到asp.net網頁的問題(桌面C#結束的問題)

我還必須創建一個asp.net網站來發布數據到Windows窗體應用程序。這是完美的。

這是我使用的代碼。下面討論什麼是不工作的。我對所有這些asp.net的東西都非常不滿,所以你可以提供的任何幫助將非常感謝。

if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() && result == DialogResult.Yes) 
      { 
       string test = "Test"; 
       WebRequest request = WebRequest.Create("http://localhost/test.aspx"); 
       byte[] byteArray = Encoding.UTF8.GetBytes(test); 

       request.Method = "POST"; 
       request.ContentType = "application/x-www-form-urlencoded"; 
       request.ContentLength = byteArray.Length; 

       // Give the response 
       using (Stream datastream = request.GetRequestStream()) 
       { 
        datastream.Write(byteArray, 0, byteArray.Length); 
       } 
      } 

然而,當我調試應用程序,並把一個斷點剛剛datastream.Write()之後,我得到的變量觀察窗口中的一些錯誤。除了那裏,我沒有任何例外。

我無法上傳圖像到這個網站,所以我會上傳到一個FreeWebs網站 - 抱歉,真的很尷尬! watch.jpg

正如你所看到的,我收到System.NotSupported上datastream.Length和datastream.Position

能否請你幫我解決這個問題?謝謝!

萬一一個asp.net程序員也看到這一點,沒有任何問題,這個接收碼?:

protected void Page_Load(object sender, EventArgs e) 
    { 
     string test = Request.BinaryRead(Request.TotalBytes).ToString(); 
    } 

謝謝大家,所以,這麼多的時間!

理查德

編輯:關於gandjustas的評論,我提供更多的信息。

鏈中的某些東西無法正常工作。我沒有得到任何正式的例外報告。

如果我在asp.net網頁使用此代碼:

string test = Request.BinaryRead(Request.TotalBytes).ToString(); 

     Response.Clear(); 
     Response.Write(test); 
     Response.End(); 

我獲得以下響應回:System.Byte []

這不是一個變量,而是包含字符串任意的文字和符號'System.Byte []'

東西不工作(很明顯)然後我看到這個System.NotSupportedException在我的Watch窗口。這讓我認爲有兩個錯誤:這個System.NotSupportedException需要在我的C#桌面應用程序中修復,並且在我甚至從應用程序發送POST之前,我的asp.net網頁不應該顯示System.Byte []。

我需要幫助。謝謝!

+0

什麼是錯誤?觀察窗口中的NotSuppeortedException或不發送請求? – gandjustas 2010-09-25 09:29:19

+0

這是足夠的額外細節,還是我留下了什麼?謝謝! – niemiro 2010-09-25 09:55:21

回答

2

夫婦對你的代碼的言論:

  1. 要設置application/x-www-form-urlencoded內容類型,但您要發送一些任意的字節數組。當你設置這個內容類型時,服務器會期望使用它編碼請求。
  2. 您在調試窗口中獲得的NotSupportedException是正常的。您無法使用NetworkStream上的Length財產。

讓我儘量簡化的情況下,你的代碼,你真的想用application/x-www-form-urlencoded

客戶:

using (var client = new WebClient()) 
{ 
    var values = new NameValueCollection 
    { 
     { "key1", "value1" }, 
     { "key2", "value2" }, 
    }; 
    byte[] result = client.UploadValues("http://example.com/test.aspx", values); 
} 

服務器:

protected void Page_Load(object sender, EventArgs e) 
{ 
    string key1 = Request["key1"]; 
    string key2 = Request["key2"]; 
} 
+0

你好!我非常感謝你的迴應!它幾乎在工作,但仍然有一件事缺失。網頁結束現在完美。如果我輸入:http:// localhost:51274/test.aspx?key1 = test&key2 = test2它會產生一個完美的響應。但是,當我運行我的程序時,它仍然無法正常工作。如果我修改網頁以返回key1,key2的值,然後單詞「Test」,則返回單詞「Test」,因此網頁顯然被調用,但出於某種非常奇怪的原因,有一個不祥之兆應該出現value1和value2的洞。他們要麼不是 – niemiro 2010-09-25 11:35:03

+0

對不起,我不明白你的問題。你能否澄清問題所在? – 2010-09-25 11:36:11

+0

上傳,或上傳完全空白。有任何想法嗎?非常感謝!附:對不起,我之前想發佈這些內容,我不習慣進入發佈而不是新行! – niemiro 2010-09-25 11:38:27

1

試試這個

  string test = "Test"; 
      WebRequest request = WebRequest.Create("http://localhost/test.aspx"); 

      request.Method = "POST"; 
      request.ContentType = "text/xml;charset=utf-8"; 
      request.ContentLength = test.Length; 

      using (StreamWriter paramWriter = new StreamWriter(request.GetRequestStream())) 
      { 
       paramWriter.Write(test, 0, test.Length); 

      } 

      WebResponse wres = request.GetResponse(); 
      StreamReader sr = new StreamReader(wres.GetResponseStream()); 
      string outdata = sr.ReadToEnd().Trim(); 
+0

給我幾分鐘試試吧! – niemiro 2010-09-25 11:34:12

1

您似乎在WebRequest類上使用MSDN的HowTo,那是正確的嗎?

嘗試使用NameValueCollection,就像達林說和,而不是使用一個字節數組操作如下:

using (var client = new WebClient()) 
{ 
    var values = new NameValueCollection 
    { 
     { "key1", "value1" }, 
     { "key2", Convert.ToBase64String(File.ReadAllBytes(test)) }, 
    }; 
    byte[] result = client.UploadValues("http://example.com/test.aspx", values); 
} 

您也可以嘗試改變內容類型;請檢查示例herehere

+0

非常感謝您的回覆!我確實使用過那篇HowTo文章,它盲目地從它複製了application/x-www-form-urlencoded,這似乎是問題的一半!我只是要閱讀你現在鏈接到的那兩篇文章。非常感謝你這麼好的鏈接! – niemiro 2010-09-25 12:54:26