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);