2012-02-11 27 views
4

RestSharp経由でサーバーに画像をアップロードするときに問題が発生しました。RestSharp WCF RESTサービスへの投稿画像

私はストリームを受け入れるRest Wcfサービスを持っています。私は常にこの例外を取得下のコードを使用している場合:ストリームに書き込まれる

ProtocolViolationExceptionバイトは、指定された のContent-Lengthバイトサイズを超えています。

コンテンツの長さを設定するために設定する必要のある設定は違いがないようです。

サーバー側はイメージを受信しませんが、より小さなバイトストリームを受信します。

助けてください。

クライアント(テスト)コード:

byte[] byteArray = File.ReadAllBytes("small.jpg"); 
     request.AddHeader("Content-Length", int.MaxValue.ToString());//doesn't matter what length I put here 
     request.AddFile("image/jpeg", (requestStream) => 
              { 
               using (var ms = new MemoryStream(byteArray)) 
               { 
                ms.CopyTo(requestStream, byteArray.Length);//doesn't matter whether I add second param or not 
                ms.Flush(); 
                ms.Close(); 
               } 
              }, 
         "sample", 
         "image/jpeg"); 


     request.Method = Method.POST; 
     client.ExecuteAsync(request, (response, a) => 
     { 
      Assert.IsNotNull(response.Content); 
      string content = response.Content; 
      resetEvent.Set(); 
     }); 

サービスコード(記憶された画像のURLを返し)

[OperationContract] 
    [WebInvoke(UriTemplate = "upload/{fileName}/{fileExtension}/{id}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] 
    Message UploadPhoto(string fileName, String fileExtension, string id, Stream fileContents); 

答えて

3

Content-Lengthヘッダはリクエストボディの内容に基づいて自動的に設定されています明示的に設定する必要はありません。

+0

Hmm ..だから、おそらくファイルが大きすぎますか? –

+1

バイト配列をとる 'AddFile()'オーバーロードを使うべきです。 –

+1

*「どの回答が最も役立つかを決めたら、回答の左側にあるチェックボックスの概要をクリックして、それを受け入れられた回答としてください。」(* from stackoverflow.com/faq#howtoask)それがあなたの問題を解決したら、答えを記入してください! – DIF

関連する問題