これが私の WCF REST エンドポイントです。
[WebInvoke(Method = "POST", UriTemplate = "_test/upload")]
public void UploadImage(Stream data)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.OK;
try
{
var parser = new MultipartParser(data);
var ext = Path.GetExtension(parser.Filename);
var filename = string.Format("{0}{1}", Guid.NewGuid().ToString("N"), ext);
var folder = HttpContext.Current.Server.MapPath(@"~\Uploads\");
var filepath = Path.Combine(folder, filename);
File.WriteAllBytes(filepath, parser.FileContents);
}
catch (Exception)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
}
}
ここからマルチパート パーサーを使用しています: http://antscode.blogspot.com/2009/11/parsing-multipart-form-data-in-wcf.html
私の問題は、上記が一部のファイル (.bat、.txt、.cs、.doc) でうまく機能することです。Fiddler では、200 (OK) ステータスを含むすべての良好な兆候が見られます。
他のファイル (.xls、.vsd) をアップロードしようとすると、400 (Bad Request) ステータスで失敗します。.doc が機能し、.xls と .vsd が失敗することに非常に驚いています。
それも一貫しています。失敗することなく、いくつかの .doc ファイルを正常にアップロードしました。また、いくつかの .xls ファイルをアップロードしようとしました - いくつかは成功し、いくつかは失敗しました (成功は何度も一貫しており、失敗は何度も一貫しています)。これを書いてさらに多くのファイルをテストすると、一貫して 504 (Fiddler - Receive Failure) エラーを生成する .pdf ファイルがあります。
参考までに、クライアントで Flex を使用し、FileReference クラスを使用してアップロードを行っています。Flex コードは標準のままです - WCF REST URL を変更するだけでこのコードを使用します: http://blog.flexexamples.com/2007/09/21/uploading-files-in-flex-using-the -ファイル参照クラス/
いくつかの失敗といくつかの成功が見られる理由は何ですか? 2つの違いがわかりませんか?
前もって感謝します。