2

我正在研究一些 WCF 示例。目前有一个带有销售登记的订单输入应用程序。为了让用户获得最新的交易,他们必须手动刷新寄存器以从数据库中提取。

我将通过 WCF 和 Publisher-Subscriber Framework 实现一个事件模型,以便任何用户订购条目,如果该屏幕打开,则向应用程序的所有其他实例发出信号以刷新其事务寄存器。

所以到目前为止的例子都是使用如下配置:

<configuration>
   <system.serviceModel>
      <services>
         <service name="TrafficLightSubscriptionService">
            <endpoint address="net.tcp://localhost:8001/TrafficLightSubscriptionService" binding="netTcpBinding" contract="ITrafficLightSubscription"/>   
         </service>
         <service name="TrafficLightEventService">
            <endpoint address="net.tcp://localhost:8002/TrafficLightEventService" binding="netTcpBinding" contract="ITrafficLightEvents"/>
         </service>
      </services>
   </system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

这适用于在带有 IIS 的单台机器上学习等,但我需要在一个小型 Windows Server 2003 域(1 个服务器,4-5 个客户端)上实现,其中“一些”客户端通过 rdp 会话和其他通过 LAN 远程连接.

我更愿意将服务托管为不在 IIS 中的 Windows 服务。因此,请指出如何为这种情况配置绑定的方向。

  1. 是否像将http://loca.lhost 换成IP 号码一样简单。
  2. 如果是这样,如果 IP 是动态分配的怎么办?
  3. 是否有任何安全考虑:访问?如何允许任何经过身份验证的用户连接到服务?
4

1 回答 1

1

穿越 RDP 边界并非易事。如果您在创建远程连接时仔细观察,您可以选择要共享哪些本地资源 - 音频、打印机、文件系统……它们不共享 IP,您也无法从目标 rdp 主机内部访问客户端 IP . 但是,我不确定您是否真的需要这个 - 通过 RDP 会话连接的客户端 - 是他们的本地计算机上的应用程序客户端,还是在连接后在 rdp 桌面内打开他们的客户端?如果客户端在他们的“家庭”电脑上,那么你就有问题,否则,只要客户端在同一个网络上,它们的连接方式就没有任何区别。

至于问题的另一部分 - 我强烈建议不要自行托管 WCF,因为 IIS 提供的可靠性如果您自己托管可能很难模仿。
其次 - 如果您在每个客户端上都需要 IIS,那么您的软件架构可能有问题。我猜只有 Server 需要一个 IIS,并且默认情况下服务器具有静态 IP(如果没有,则通过它们的域计算机名称来引用它们,并且您的 DNS 将进行路由)。客户端应在订阅时提供其当前 IP。

希望这可以帮助...

于 2013-08-21T11:08:41.963 回答