/// <summary> /// Отправка файла на сервер /// </summary> /// <param name="settingName">название настройки</param> /// <param name="Continue">продолжить с момента разрыва</param> public void UploadFileToServer(string settingName) { Logger logger = LogManager.GetCurrentClassLogger(); logger.Debug(settingName + ": Начало отправки файла на сервер"); var baseConfig = GetBaseConfig(settingName); ChannelFactory <IFileTransfer> factory; SetCurrentStatus(settingName, Job.SendFileToServer, JobStatus.Process); OnExchangeProcess(GetCurrentStatus(settingName)); Status remoteStatus = RemoteGetCurrentStatus(settingName); if (remoteStatus.jobStatus == JobStatus.Error && remoteStatus.description.Contains("Не найдена настройка")) { throw new Exception(remoteStatus.description); } //закорем поток после передачи using (FileData sendData = new FileData()){ sendData.settingName = settingName; sendData.fileByteStream = GetCompressFileStream(settingName); //попробуем загрузить из файла конфигурации try{ factory = new ChannelFactory <IFileTransfer>("IFileTransfer"); } catch { //если нет то создаем вручную NetTcpBinding streamBinding = new NetTcpBinding(SecurityMode.None); streamBinding.CloseTimeout = TimeSpan.FromHours(0.5); streamBinding.OpenTimeout = TimeSpan.FromHours(0.5); streamBinding.SendTimeout = TimeSpan.FromHours(13); streamBinding.TransferMode = TransferMode.Buffered; streamBinding.MaxReceivedMessageSize = 429496729; EndpointAddress endpointAdress = new EndpointAddress(config.HostSetting.Protocol + @"://" + baseConfig.ServerAdress + "/FileTransfer"); factory = new ChannelFactory <IFileTransfer>(streamBinding, endpointAdress); } IFileTransfer channel = factory.CreateChannel(); if (remoteStatus.currentPosInFile > 0) { sendData.fileByteStream.Seek(remoteStatus.currentPosInFile, SeekOrigin.Begin); } channel.UploadFile(sendData); factory.Close(); } logger.Debug(settingName + ": Конец отправки файла на сервер"); SetCurrentStatus(settingName, Job.SendFileToServer, JobStatus.Complite, "", 0); OnExchangeProcess(GetCurrentStatus(settingName)); }