如何创建服务器端应用程序,如何完成客户端 - 服务器通信?

时间:2010-01-26 09:58:43

标签: c# sql-server client-server communication-protocol

我希望有一个用.NET编写的客户端 - 服务器应用程序,它可以执行以下操作:

  • 服务器正在运行Linux
  • 在服务器上有包含文档URL的SQL数据库(mySQL)

我们想要什么: - 服务器端会定期抓取所有URL并为它们创建全文索引 - 客户端可以使用GUI

对该索引执行查询

客户端应用程序是使用C#用.NET编写的。除了在文档中搜索外,它还可以做很多其他的事情,这些事情在这里没有描述,而且很好地在客户端完成。

我们也想在服务器端使用C#,但我们没有这方面的经验。通常这样的事情怎么样?


现在根据一些答案澄清问题:

对我来说最不清楚的是如何处理客户端 - 服务器通信。客户端和服务器通常使用套接字,关心IP地址,端口或NAT遍历等细节吗?或者是否有一些通用的框架和模式,这将使这透明,并使客户端 - 服务器消息或过程调用容易?这个的任何例子或好的起点?是否有一些常用的技术如何处理同时为多个客户端服务的单个服务器这一事实?

5 个答案:

答案 0 :(得分:1)

要在Linux上使用c#,您需要使用Mono。这是CLR规范的开源实现。

接下来,您需要决定如何在服务器和客户端之间进行通信,从最低级别的打开TCP / IP套接字和向上和向下发送位,到.Net远程处理,到WCF,以及在服务器上公开Web服务。我不知道WCF实现在单声道上有多完善,我想你可能也会遇到单声道和MS .Net之间的二进制远程处理问题。

我建议RPC样式WebServices提供一个非常好的解决方案。 WebServices还具有让其他平台的客户端轻松连接的优势。

修改 回应对问题的澄清。 如果你想在服务器和客户端上使用c#,我建议在服务器上使用mono / ASP.NET / WebServices。

我做的一个假设是你可以做一个客户端拉模型,其中每条消息都是由客户端发起的。使用另一种方法可以允许服务器将事件推送到客户端。鉴于客户端能够定期对服务器进行限制,我不认为这有多大的缺点,但可能取决于您正在开发的应用程序类型。

Mono允许在Linux机器上执行c#(编译为IL)。 Mono ASP.NET允许您使用标准ASP.NET并集成到Apache中,参见http://www.mono-project.com/ASP.NET,最后WebServices允许您在客户端和服务器之间以强类型方式进行稳健通信。

使用这种方法可以否定澄清中提出的大多数问题,并使其成为别人的问题 套接字/ SSL - 由客户端上的标准.Net运行时和服务器上的Apache处理。
IPAddress / ports / NAT遍历 - 全部都得到了解决。 DNS查找将获得服务器IP。打开套接字将允许服务器通过任何防火墙和NAT设置进行响应 多个客户端 - Apache构建为与ASP.NET同时处理多个客户端处理,因此您不应该遇到任何问题。

答案 1 :(得分:1)

正如许多人已经提到的那样,你提到的一些事情会让你感到痛苦。我不打算进入那些,而是回答你关于沟通的原始问题。

目前这种通信的流行选择是Web服务。这些允许您使用HTTP协议进行远程调用,并使用XML对请求和响应进行编码。虽然这种方法受到批评,但我发现启动和运行它非常简单,几乎适用于所有应用程序。

.NET框架内置了对Web服务的支持,您的客户端肯定可以调用它。简单地看一下mono网站表明它也支持Web服务,所以用C#编写服务器并在mono下运行它应该没问题。谷歌搜索“C#Web服务教程”显示许多网站有关于如何开始的信息,这里是从这些结果随机选择:

http://www.codeguru.com/Csharp/Csharp/cs_webservices/tutorials/article.php/c5477

答案 2 :(得分:0)

看看Grasshopper: “使用Grasshopper,您可以使用Microsoft®中最喜欢的开发环境在支持Java的平台(如Linux)上部署应用程序”

或者查看here

ideea是将您的应用程序转换为Java,然后在Tomcat或JBoss上运行它。

答案 3 :(得分:0)

另一种方法:使用Apache的Mod_AspDotNet模块,如here所述。

答案 4 :(得分:0)

Basic Client/Server Chat Application in C#看起来像一个例子,可能是我的起点。相关的.NET类是TcpClientTcpListener