我是WCF的新手,所以如果我不是很清楚的话,请耐心等待。
我有一个环境,我在局域网内连接了一组计算机(10到20个)。每台计算机都有一个静态IP,并附带2个应用程序:AppA和AppB。
AppA和AppB旨在相互共享信息,但我不希望AppA在同一台计算机上与AppB配对。我需要AppA从LAN中的计算机列表中选择一台计算机,然后尝试建立与所选计算机上运行的AppB的连接。
例如,我在计算机X上运行AppA,并且从计算机列表中,我选择连接到计算机Y.AppA将连接到在计算机Y上运行的AppB(托管双工WCF服务)
在我的AppB上,我已经定义了服务和回调接口。
我在这里有几个问题:
DuplexChannelFactory
打开双工通道,并将Endpoint
设置为所选计算机的端点。我尝试了Tom Redfern's answer,我可以在AppB上运行该服务,AppA可以连接到该服务。
但是,我已经实现了它,以便在运行时通过代码(自托管)启动服务。 AppA(客户端)也通过代码使用DuplexChannelFactory
在运行时连接到服务。这意味着AppA和AppB在App.config
中都没有WCF内容。
这就是我在AppB上托管服务的方式:
public static void HostService()
{
var baseAddress = new Uri(GetHostAddress());
Host = new ServiceHost(typeof(MyService), baseAddress);
NetTcpBinding netTCPBinding = new NetTcpBinding();
netTCPBinding.ReliableSession.Ordered = true;
Host.AddServiceEndpoint(typeof(IMyService), netTCPBinding, baseAddress);
Host.Open();
}
仅当用户在AppB中执行某些操作时才会调用HostService()
方法。但是,当应用程序启动时,WcfSvcHost
窗口显示存在MyService
的实例,但它处于停止状态。错误细节说明:
无法启动该服务。此服务没有定义端点。 请在配置文件中添加至少一个服务端点 再试一次。
我在调用HostService()
的行上设置了断点,WcfSvcHost
在调用HostService()
之前已经显示该消息。除了我编写的代码之外,似乎有些东西正在尝试启动服务。
答案 0 :(得分:1)
如何设置AppB,使其IP依赖于它的机器 正在运行?
使用localhost作为所有AppB实例的基地址。
如何设置AppA以便它可以动态连接到 不同的AppB在不同的IP地址上运行?
你必须move the client endpoint configuration into code。然后让某种运行时解析器根据某种查找选择合适的服务端点地址。