Вот моя конечная точка 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 (ОК).
Когда я пытаюсь загрузить другие файлы (.xls, .vsd), происходит сбой со статусом 400 (неверный запрос). Я очень удивлен, что .doc сработает, а .xls и .vsd потерпят неудачу.
Это также соответствует. Я успешно загрузил несколько файлов .doc без сбоев. Я также попытался загрузить несколько файлов .xls - некоторые удаются, некоторые терпят неудачу (успехи повторяются снова и снова, неудачи повторяются снова и снова). Когда я пишу это и проверяю все больше и больше файлов, появляется файл .pdf, который последовательно выдает ошибку 504 (Fiddler - Receive Failure).
К вашему сведению, я использую Flex на клиенте и использую класс FileReference для выполнения загрузки. Код Flex является стандартным в том виде, в каком он есть - используя этот код, единственное изменение - URL REST WCF: http://blog.flexexamples.com/2007/09/21/uploading-files-in-flex-using-the-filereference-class/
Есть идеи, почему я вижу некоторые неудачи и некоторые успехи? Я не вижу разницы между этими двумя?
Заранее спасибо.