0

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

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

我们想要什么: - 服务器端会定期抓取所有 URL 并为它们创建一个全文索引 - 客户端将能够使用 GUI 对该索引执行查询

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

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


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

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

4

5 回答 5

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 允许您在客户端和客户端之间以强类型的方式进行健壮的通信你的服务器。

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

于 2010-01-26T10:01:01.293 回答
1

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

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

.NET 框架内置了对绝对可以由您的客户端调用的 Web 服务的支持。对 mono 网站的简要介绍表明它也支持 Web 服务,因此用 C# 编写服务器并在 mono 下运行它应该没问题。谷歌搜索“C# Web 服务教程”显示了许多网站,其中包含有关如何开始的信息,以下是从这些结果中随机挑选的:

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

于 2010-01-26T13:04:34.973 回答
0

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

或者看这里

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

于 2010-01-26T10:04:01.813 回答
0

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

于 2010-01-26T10:05:14.060 回答
0

这个C# 中的基本客户端/服务器聊天应用程序看起来像是一种示例,这可能是我的起点。相关的 .NET 类是TcpClientTcpListener

于 2010-01-26T12:10:12.867 回答