1
2
假设除了可以在每台服务器上安装什么以外,您对环境的控制为零(即没有MSMQ、没有ESB等),那么我将研究如何使用WCF在服务器之间进行通信。简单的问题似乎是,内存中的列表需要在两个服务器之间保持同步,并且每当列表的内容发生更改时,都需要通知两个服务器的用户。 使用服务器托管和使用的内部WCF服务,您可以使用简单的fire-and-forget消息来保持列表同步。想象一下下面的场景:
|
2
1
假设您不需要实时类型的通知,一种典型的方法是使用后端会话数据库或专用会话服务器,以便所有集群计算机都能看到您当前登录的所有用户。然后您可以编写一个轮询服务来发送更改通知,或者根据您的需求编写更高级的服务。 在您的示例中,您可以将“内存中”用户列表移动到共享内存服务器或共享数据库。当然,您可以实现某种类型的集群更新通知以发送到所有计算机,但其复杂性可能远远超出您的需要。 |
3
1
服务器之间可以直接通信吗?如果是这样,您可能希望设置只有服务器场中的其他服务器才能连接的专用终结点。然后,当服务器C收到一条消息时,它向服务器a发送一条消息,通知它这个事实,然后服务器a可以将这个消息转发给它的客户机。 |
4
1
有了Memcached,您可以将它作为所有需要广播的项目的单一真相点。因此,当您获得客户端登录时,您会将一些简单的数据转储到Memcached中。它通知另一个服务器并更新另一个服务器的列表。然后,在发布信息时,查询Memcached。 使用MSMQ,将登录信息推送到队列,然后在两台服务器上实现侦听器,从队列中读取并更新内存中的“可发布”信息列表。这样,两个服务器都可以随时了解需要发布的数据。 |
5
1
这个解决方案非常复杂,但也是可能的。我将为您的集群使用一个中央mssql,并编写一些T-SQL触发器代码。当您关心的记录被修改/etc时,我会让SQL服务器向集群中的其他服务器发送特殊的httpweb请求消息(假设集群中的一个服务器可以任意地与其他/所有集群服务器通信),让它们知道任何更改。然后,每个服务器都可以使用全局应用程序缓存向服务器上的每个会话广播更改。
-杰夫 |
6
1
看起来您需要使用对等网络(netPeerTcpBinding)。我不确定你的托管环境是否支持这个。 |
7
0
这有点像您在问题中描述的路由服务。
在silverlight客户机询问web服务器“我有什么新东西吗”的情况下,实现一个轮询系统可能是最简单的,该请求将包含客户机最后一次询问的时间。新事物的列表将存储在一个数据库表中。所以你点击哪个网络服务器没有问题。 另外,您需要注意silverlightwcf中的限制,如果我理解正确的话,它并没有实现所有的WCF。 编辑2
只要您使用的是silverlight客户机,客户机就很难彼此直接通信。有两种可能,尽管它们需要额外的工作/成本:
|
8
0
MS的velocity项目对您来说可能比数据库后端更快; 它的API非常简单,并且与.NET的其他部分保持一致。 |
Ehsan Akbar · 当请求被激发时,WCF请求时间会增加 6 年前 |
Gans · 具有多操作合约的WCF Rest服务 6 年前 |
Moelgaard · NLog中的IIS应用程序名称。配置 6 年前 |
Kerwen · WCF服务调用异步函数 6 年前 |