Я загрузил файл на ADO.NET, используя POST, хотя я не уверен, что это рекомендуемый подход. Вот как я это сделал:
В сервисе данных я реализовал сервисную операцию под названием UploadFile (используя атрибут WebInvoke, чтобы он обслуживал вызовы POST):
[WebInvoke]
public void UploadFile()
{
var request = HttpContext.Current.Request;
for (int i = 0; i < request.Files.Count; i++)
{
var file = request.Files[i];
var inputValues = new byte[file.ContentLength];
using (var requestStream = file.InputStream)
{
requestStream.Read(inputValues, 0, file.ContentLength);
}
File.WriteAllBytes(@"c:\temp\" + file.FileName, inputValues);
}
}
Затем на стороне клиента я вызываю службу данных, используя:
var urlString = "http://localhost/TestDataServicePost/CustomDataService.svc/UploadFile";
var webClient = new WebClient();
webClient.UploadFile(urlString, "POST", @"C:\temp\test.txt");
При этом используется веб-клиент для загрузки файла, который помещает данные файла в коллекцию HttpRequest.Files и устанавливает тип содержимого. Если вы предпочитаете отправлять содержимое файла самостоятельно (например, из элемента управления Asp FileUpload), а не веб-клиенту, читающему файл с использованием пути к файлу, вы можете использовать веб-запрос, аналогичный тому, который выполняется в этот пост. Хотя вместо использования
FileStream fileStream = new FileStream(uploadfile,
FileMode.Open, FileAccess.Read);
вы можете использовать байтовый массив, который вы передаете.
Надеюсь, это поможет.