我应该实现一个为某些客户端提供服务的应用程序,同时与其他远程服务进行通信。换句话说,这个应用程序应该是它的客户端的服务器,但它也应该是远程服务的客户端。我应该将 NetTcpBinding 与回调一起用于与远程服务的通信以及与客户端的通信:
- 它应该向远程服务发送请求并通过回调接收来自它们的响应;
- 它应该接收来自客户端的请求并使用回调向它们发送响应。
这两种类型的通信应该在不同的线程上开发,但需要同时访问(读取和写入)共享数据:例如,当应用程序从客户端接收数据时,它应该将其中一些数据“重定向”到某些远程服务。
我可以在两个单独的线程中实现应用程序的两侧,并使用一个或多个单例对象来共享从客户端或远程服务接收到的公共数据。我可以使用共享Queue<T>
作为单例对象(T
从远程服务或客户端接收的数据类型在哪里):这样,当我的服务应用程序从客户端接收数据时,它会将接收到的数据排入队列;同样,当它从远程服务接收数据时,将它们放在同一个队列中;最后,读取入队的数据:一些数据被发送到远程服务,而另一些数据被发送到客户端。
- 我想我需要一个
Queue<T>
共享对象。 - 然后我需要一个线程
ServiceHost
来为客户端实例化。 ServiceHost
另一个线程实例化远程服务的代理。- 这是对的吗?还是有更简单、更高效或更多 OOP 的解决方案?
- 如何处理队列中数据的重定向?理论上,任何接收到的数据(来自远程服务或客户端)都可以立即处理并重定向,但问题是服务器端(从客户端接收数据)可能会使用客户端来重定向一些数据到远程服务,但客户端可能正忙于从其他远程服务接收数据。
你能告诉我互联网上任何完整的例子吗?