Для загрузки большого файла в WebServices (не в Windows Cominication Foundation WCF) необходимо выполнить следующие действия:
В файл на стороне сервера Web.Config добавьте этот xml и измените значение maxRequestLength в зависимости от максимального размера загрузки; по умолчанию defoult maxRequestLength составляет 4 МБ, в этом примере 8192 = МБ
<httpRuntime
executionTimeout="600"
maxRequestLength="8192"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
enableVersionHeader="true"
/>
Добавьте еще одну общедоступную функцию на стороне сервера, эта функция получила байт [], содержащий файл, имя файла и путь, по которому вы не сохраните файл на сервере.
public String UploadFile(byte[] fileByte, String fileName, String savePath)
{
string newPath = savePath;
if (!Directory.Exists(newPath))
{
Directory.CreateDirectory(newPath);
}
newPath = newPath + fileName;
System.IO.FileStream fs1 = null;
byte[] b1 = null;
b1 = fileByte;
fs1 = new FileStream(newPath, FileMode.Create);
fs1.Write(b1, 0, b1.Length);
fs1.Flush();
fs1.Close();
fs1 = null;
return newPath;
}
На стороне клиента добавьте этот код для отправки файла:
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.FileName = "Select a File";
dlg.DefaultExt = ".xls";
dlg.Filter = "Excel documents (.xls)|*.xls";
// Show open file dialog box
Nullable<bool> result = dlg.ShowDialog();
// Process open file dialog box results
if (result == true)
{
string filename = dlg.FileName;
string file = Path.GetFileName(filename);
System.IO.FileStream fs1 = null;
fs1 = System.IO.File.Open(filename, FileMode.Open, FileAccess.Read);
byte[] b1 = new byte[fs1.Length];
fs1.Read(b1, 0, (int)fs1.Length);
fs1.Close();
String savePath = @"C:\DOC\IMPORT\";
String newPath = WEB_SERVICES.UploadFile(b1, file, savePath);
MessageBox.Show(String.Format("The file is uploaded in {0}", newPath));
}
else
{
MessageBox.Show("Select a file, please");
}