2011-06-21 5 views
2

フレンド! 私を助けてください!SilverlightアプリケーションからHTTPWebrequestでファイルをアップロードする(コンテンツの長さが13の理由)

私はSilverlightからファイルを投稿しようとします。私は、このようなクラスを使用します。

public class HttpHelper 
    { 
     public WebRequest Request { get; set; } 
     public Stream Filestream { get; private set; } 

     public HttpHelper(Stream filestream) 
     {    
      Request = WebRequest.Create("http://www.mysite.com/recieve");     
      Request.Method = "POST"; 
      Request.ContentType = "application/octet-stream"; 
      Filestream = filestream; 
     } 

     private static void BeginFilePostRequest(IAsyncResult ar) 
     { 
      HttpHelper helper = ar.AsyncState as HttpHelper; 
      if (helper != null) 
      { 
       byte[] bytes = new byte[helper.Filestream.Length]; 
       int sf = helper.Filestream.Read(bytes, 0, (int)helper.Filestream.Length); 
       //helper.Request.ContentLength = bytes.Length; //It doesn't work in SL 
       using (StreamWriter writer = new StreamWriter(helper.Request.EndGetRequestStream(ar))) 
       { 
        writer.Write(bytes); 
       } 
       helper.Request.BeginGetResponse(new AsyncCallback(HttpHelper.BeginResponse), helper); 
      } 
     } 

     private static void BeginResponse(IAsyncResult ar) 
     { 
      HttpHelper helper = ar.AsyncState as HttpHelper; 
      if (helper != null) 
      { 
       HttpWebResponse response = (HttpWebResponse)helper.Request.EndGetResponse(ar); 
       if (response != null) 
       { 
        Stream stream = response.GetResponseStream(); 
        if (stream != null) 
        { 
         using (StreamReader reader = new StreamReader(stream)) 
         { 
          //anything... 
         } 
        } 
       } 
      } 
     } 

     public void PostFile() 
     {    
      this.Request.BeginGetRequestStream(new AsyncCallback(HttpHelper.BeginFilePostRequest), this); 
     } 
    } 

私は自分のSilverlightアプリケーションでストリームを持っているし、送信ボタンをクリックすることによりPostFileを呼び出そう:ファイルなし

private void submit_button_Click(object sender, RoutedEventArgs e) 
     {   
      //...   
      HttpHelper helper = new HttpHelper(memory_stream); 
      helper.PostFile(); 
     } 

しかし、個人用サイトのレシーブ要求を。それはちょうどContentLength 13を持っています。何が問題なのですか?

+0

私は同じ問題で戦っていますが、私の場合、Silverlightは私のJava Webサービスへのリクエストさえしません。あなたはまだそれを解決しましたか? –

答えて

0

usingブロックを終了する前にライターをフラッシュしてみてください。また、EndGetRequestStreamから取得したストリームのCloseも呼び出す必要があります。

+0

ありがとう!私はそれを試してみました。しかし、ContentLengthも13でした。それは変です... – greatromul

+0

私も取得します13.あなたはこれを把握しましたか? – whitehawk

0

HTTPリクエストストリームとすべてのダウンストリームストリームをフラッシュして廃棄する必要があります。

関連する問題