///Обработка запроса от клиента HTTP.В Данном случае у нас сервер приложений является клиентом. ///Так как на каждом клиенте запускается сервер HTTP. private static void ServerProcessHTTP(object o) { try { var context = o as HttpListenerContext; HttpListenerRequest request = context.Request; HttpListenerResponse response = context.Response; CommandCode commandCode; string ConnectionGUID = ""; string FileName = ""; string RequestStrLog = ""; string ResponseStr = ""; string RequestStr = ""; if (!sys.GetComandCode(request.RawUrl, out commandCode, ref ConnectionGUID, ref FileName)) { return; } ResponseStr = "Success"; //Если сервер прислал файл, то сохраняем в темповой папке. if (FileName != "") { sys.GetRequestFile(context.Request.ContentEncoding, sys.GetBoundary(context.Request.ContentType), context.Request.InputStream, FileName); RequestStrLog = sys.GetDateTimeNow() + ": Запись файла: " + FileName + Var.CR; //action = () => tbLogQuery.AppendText(RequestStrLog); //tbLogServer.Invoke(action); } else { //RequestStr - это тело запроса от клиента. RequestStr = sys.GetRequestString2(context.Request.ContentEncoding, sys.GetBoundary(context.Request.ContentType), context.Request.InputStream); RequestStrLog = sys.GetDateTimeNow() + ": " + RequestStr.Left(200) + "..." + Var.CR; RequestStrLog = RequestStrLog.Replace(Var.CR, "") + Var.CR; //ResponseStr = "Success"; //GetServerResponse(CommandCode, RequestStr); //string ResponseStr = "asd123нгшщзхъzxc";//Convert.ToBase64String(fileBuffer); } //Проверка гуида клиента. Верное ли значение на сервере приложений. if (commandCode == CommandCode.S205) { ResponseStr = (Var.con.ConnectionGUID == RequestStr) ? "GUID Ok." : "GUID mismatch."; } byte[] buffer = System.Text.Encoding.Default.GetBytes(ResponseStr); //UTF8 response.ContentLength64 = buffer.Length; System.IO.Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); output.Close(); if (commandCode == CommandCode.S201) { ServerWork.ServerStop(); Environment.Exit(0); } //FormMainLocal.TopMost = true; if (commandCode == CommandCode.S202) { sys.SM(RequestStr, MessageType.Error, "Сообщение от администратора"); } if (commandCode == CommandCode.S203) { sys.SM(RequestStr, MessageType.Information, "Сообщение от администратора"); } //if (commandCode == CommandCode.S204) sys.SM(RequestStr, MessageType.Question, "Вопрос от администратора"); //Пока не работает. } catch (Exception ex) { //В случае другой ошибки, выводим что это за ошибка. sys.SM("Ошибка " + ErrorCode.C119 + " локального сервера: " + ex.Message); //Environment.Exit(0); //работу не продолжаем! } }
//[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)] private static void Main(string[] args) { /*<configuration> * <runtime> * <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> * <dependentAssembly> * <assemblyIdentity name="VendorAssembly" culture="neutral" publicKeyToken="307041694a995978"/> * <codeBase version="1.1.1.1" href="FILE://*****:*****@"C:\000_Тravin\Дизайнер SD\FBA\Library\"); //AppDomainSetup m_Setup; //m_Setup = new AppDomainSetup(); //m_Setup.PrivateBinPathProbe = ""; //m_Setup.PrivateBinPath = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath; //m_Setup.LoaderOptimization; //Directory.SetCurrentDirectory(@"C:\000_Тravin\Дизайнер SD\FBA\Library\"); // второй backslash перед Алекс //"System.AppDomain.AppendPrivatePath(string)" является устаревшим: "AppDomain.AppendPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead. http://go.microsoft.com/fwlink/?linkid=14202" (CS0618) - C:\000_Тravin\Дизайнер SD\FBA\ClientApp\Program.cs:43,4 Var.SystemName = "ClientApp"; //Установка соединения с локальной базой SQLIte. Без неё не работаем. sys.ConnectLocal(); //sys.ConnectLocal(); //sys.ConnectRemote(); if (Var.Args.Length < 2) { sys.ConnectRemote(); } else { sys.ConnectParam(); } //Если соединение с сервером приложений, то получаем локальный порт, и стартуем локальный сервер HTTP. if (!Var.con.ConnectionDirect) { Var.LocalServerPort = sys.GetServerLocalPort(); ServerWork.ServerStart(Var.FormMainObj); } //Запуск главной формы. Var.FormMainObj.ShowInTaskbar = true; //Даже если форма настроена на то чтобы скрываться, все равно показываем. System.Windows.Forms.Application.Run(Var.FormMainObj); //Остановка локального сервера. if (!Var.con.ConnectionDirect) { sys.SendEventClientClose(); ServerWork.ServerStop(); } }