C# 服务器端应用程序是如何创建的,客户端与服务器之间的通信是如何完成的?

C# 服务器端应用程序是如何创建的,客户端与服务器之间的通信是如何完成的?,c#,sql-server,client-server,communication-protocol,C#,Sql Server,Client Server,Communication Protocol,我希望使用.NET编写一个客户端-服务器应用程序,该应用程序将执行以下操作: 服务器正在运行Linux 服务器上有包含文档URL的SQL数据库(mySQL) 我们想要的是: -服务器端会定期抓取所有URL并为它们创建全文索引 -客户端将能够使用GUI对该索引执行查询 客户端应用程序是使用C#在.NET中编写的。除了在文档中搜索之外,它还可以做很多其他的事情,这些事情在这里没有描述,并且在客户端做得很好 我们也希望在服务器端使用C#,但我们在这方面没有经验。像这样的事情通常是怎么做的 现在根

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

  • 服务器正在运行Linux
  • 服务器上有包含文档URL的SQL数据库(mySQL)
我们想要的是: -服务器端会定期抓取所有URL并为它们创建全文索引 -客户端将能够使用GUI对该索引执行查询

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

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


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

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

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

接下来,您需要决定如何在服务器和客户端之间进行通信,从打开TCP/IP套接字并上下发送位的最低级别到.Net远程处理、WCF,再到在服务器上公开Web服务。我不知道mono上的WCF实现有多复杂,而且我认为您可能对mono和MS.Net之间的二进制远程处理有问题

我建议RPC风格的Web服务提供一个非常好的解决方案。WebServices还有一个优势,就是可以让其他平台的客户端轻松连接

编辑 回应对问题的澄清。 我建议在服务器上使用mono/ASP.NET/WebServices,如果您希望在服务器和客户端上都使用c#

我所做的一个假设是,您可以执行客户机拉式模型,其中每个消息都由客户机发起。使用另一种方法可以允许服务器将事件推送到客户端。考虑到客户端有能力定期对服务器进行加密,我不认为这有很大的退缩,但它可能取决于您正在开发的应用程序类型。 Mono允许在Linux机器上执行c#(编译为IL)。Mono ASP.NET允许您使用标准ASP.NET并集成到Apache see中,最后WebServices允许您以强类型方式在客户端和服务器之间进行可靠的通信

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

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

或者看


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

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

这看起来像是一种示例,可能是我的起点。相关的.NET类是和

正如许多人已经提到的那样,您已经提到了一些会给您带来痛苦的事情。我不打算讨论这些问题,相反,我将回答你最初关于沟通的问题

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

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


如果您想要linux服务器端,您需要使用Mono。当然,没有什么可以阻止您让客户端.Net应用程序与非.Net服务器实现通信。对于linux服务器来说,Net不是显而易见的选择。是的,有单声道,但不能保证100%兼容。没有理由说服务器不能在Java中,客户端不能在C#中,只要它们彼此交谈。你在开发什么样的应用程序?这将对你应该做出的决定产生重大影响。游戏需要大量低延迟双向通信。Busines/DB CRUD应用程序很少由客户端启动,可能有多秒的延迟时间。如果你能给我们更多的细节,我们的建议会更具体一些。基本上,您(通常)向服务器发送HTTP请求,然后服务器将XML发送回您。有点像使用浏览器进行远程过程调用。如果我正确理解ASP.NET,恐怕ASP.NET不是我的目标。我想有一个真正的客户端独立