4

RestSharp を介してサーバーに画像をアップロードする際に問題が発生しています。

ストリームを受け入れる Rest Wcf サービスがあります。以下のコードを使用すると、常にこの例外が発生します。

ProtocolViolationException ストリームに書き込まれるバイトが、指定された Content-Length バイト サイズを超えています。

どのような設定を構成する必要があります... 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);
4

1 に答える 1

3

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

于 2012-02-17T01:13:33.017 に答える