2015-09-28 102 views
1

具有以下體系結構:客戶端部分(C#上的dll)在服務器(或Windows服務或Web服務)上發送一定數量的映像,然後服務器發送響應以XML文件的形式處理結果。簡單客戶端 - 服務器應用程序

客戶端只是一個沒有界面和輸入/輸出的自動應用程序。

服務器。它使用多線程(使用ThreadPool)來轉換引擎來處理圖像。因此,當引用一個新客戶時,服務器創建一個處理髮生的新線程,最後它向用戶發送一個回覆(xml文件)。服務器上的負載不是很大,3-20個併發連接。

到目前爲止,我無法理解什麼是交互架構最適合我的情況。有幾種方法可以實現或編寫一個異步套接字服務器,可以使用WCF或只寫ASP.NET應用程序,並將其注入IIS(對於我最偏愛的這個選項)。

哪種傳輸協議最適合使用?做HTTP傳輸大量圖片(然後你可以轉向Web服務),或者應該考慮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

相關問題