2015-09-28 3 views
1

Имеет следующую архитектуру: клиентская часть (dll на C#) отправляет определенное количество изображений на сервер (или службу Windows или веб-службу), где они обрабатываются, а затем сервер отправляет ответ в виде XML-файла результатов обработки.Простое клиент-серверное приложение

Клиент - это просто автоматизированное приложение без интерфейса и ввода/вывода.

Сервер. Он превращает движок с помощью многопоточности (используя ThreadPool) для обработки изображений. Соответственно, при обращении к новому клиенту сервер создает новый поток, в котором происходит обработка, и в конце он отправляет ответ пользователю (файл xml). Нагрузка на сервер - это не очень большие 3-20 одновременных соединений.

До сих пор я не могу понять, какая архитектура взаимодействия лучше всего подходит для моего дела. Существует несколько способов реализовать или написать сервер асинхронных сокетов, либо использовать WCF, либо просто написать приложение ASP.NET, и вылить его на IIS (для этой опции я больше всего склоняюсь).

Какой протокол передачи лучше всего использовать? Выполняет ли HTTP для передачи больших объемов изображений (тогда вы можете перемещаться в направлении веб-службы) или должен думать о TCP/IP (теперь WCF)?

Вот и все!

+0

кто является конечным пользователем? заключается в том, что человек в Интернете или его приложение? Какова потребность в пропускной способности? – lazy

+0

нанять технического архитектора/решения. – user1666620

+1

Взгляните на потоковое с помощью WCF - https://msdn.microsoft.com/en-us/library/ms733742(v=vs.110).aspx – Tom

ответ

-1

Вот способ отправить их по отдельности:

 Byte[] imgByte = null; 
     System.IO.Stream strm; 
     string imgfile = System.IO.Path.GetFileName(FileUpload1.FileName); 
     string ext = System.IO.Path.GetExtension(FileUpload1.FileName); 
     if (ext == ".jpg" | ext == ".jpeg" | ext == ".gif" | ext == ".png") 
     { 
      try 
      { 

       if (FileUpload1.HasFile && FileUpload1.PostedFile != null) 
       { 
        int fileLen = FileUpload1.PostedFile.ContentLength; 
        HttpPostedFile File = FileUpload1.PostedFile; 
        StringBuilder sb = new StringBuilder(); 
        imgByte = new Byte[fileLen]; 
        strm = FileUpload1.FileContent; 
        strm.Read(imgByte, 0, fileLen); 
       } 
      } 
      catch (Exception ex) 
      { 
       Label1.Text = "Stream: " + ex.ToString(); 
      } 
      if (imgByte != null) 
      { 
       try 
       { 
        string connStr = ConfigurationManager.ConnectionStrings["imgContext"].ConnectionString; 
        string cmdStr = "INSERT INTO [Table] (filename, image) VALUES (@filename, @image);"; 
        using (SqlConnection conn = new SqlConnection(connStr)) 
        { 
         using (SqlCommand cmd = new SqlCommand(cmdStr, conn)) 
         { 
          conn.Open(); 
          cmd.Parameters.AddWithValue("@filename", imgfile); 
          cmd.Parameters.AddWithValue("@image", imgByte); 
          cmd.ExecuteNonQuery(); 
          conn.Close(); 
          cmd.Dispose(); 
          conn.Dispose(); 
         } 
        } 
       } 
       catch (Exception ex) 
       { 
        Label2.Text = "sql: " + ex.ToString(); 
       } 
      } 
+0

. Вы захотите поместить свои операторы .Close и .Dispose в блок finally, а не внутри блока try ... – Milney

Смежные вопросы