2015-09-28 181 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

相关问题