.net 具有动态主机/客户端的WCF双工服务

.net 具有动态主机/客户端的WCF双工服务,.net,wcf,duplex-channel,.net,Wcf,Duplex Channel,我是WCF的新手,所以如果我问得不清楚,请原谅我 我有一个环境,我有一组计算机(10到20台)连接在局域网内。每台计算机都有一个静态IP,并附带2个应用程序:AppA和AppB AppA和AppB旨在相互共享信息,但我不希望AppA与AppB在同一台计算机上配对。我需要AppA从LAN中的计算机列表中选择一台计算机,然后尝试建立与在所选计算机上运行的AppB的连接 例如,我正在计算机X上运行AppA,并且从计算机列表中选择连接到计算机Y。AppA将连接到计算机Y上运行的AppB(该计算机正在承载

我是WCF的新手,所以如果我问得不清楚,请原谅我

我有一个环境,我有一组计算机(10到20台)连接在局域网内。每台计算机都有一个静态IP,并附带2个应用程序:AppA和AppB

AppA和AppB旨在相互共享信息,但我不希望AppA与AppB在同一台计算机上配对。我需要AppA从LAN中的计算机列表中选择一台计算机,然后尝试建立与在所选计算机上运行的AppB的连接

例如,我正在计算机X上运行AppA,并且从计算机列表中选择连接到计算机Y。AppA将连接到计算机Y上运行的AppB(该计算机正在承载双工WCF服务)

在我的AppB上,我已经定义了服务和回调接口

我这里有几个问题:

  • 如何设置AppB,使其IP取决于正在运行的机器?我不能每次都用不同的App.config文件声明不同的主机基址来构建AppB 10-20次
  • 如何设置AppA,使其能够动态连接到在不同IP地址上运行的不同AppB?我打算创建一个GUI,其中显示IP的静态列表(因为计算机列表是静态的,带有静态IP),并且用户将从列表中选择一台计算机。然后使用代码,应用程序将使用
    DuplexChannelFactory
    打开双工通道,并将
    端点设置为所选计算机的端点
  • 更新 我试过了,我能够在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();
    }
    
    HostService()
    方法仅在用户在AppB中执行某些操作时调用。但是,当应用程序启动时,
    WcfSvcHost
    窗口显示有一个
    MyService
    的实例,但它处于停止状态。错误详细信息显示:

    无法启动该服务。此服务未定义终结点。 请在配置文件中为该服务添加至少一个终结点,然后重试 再试一次

    我在调用
    HostService()
    的线路上设置了一个断点,
    WcfSvcHost
    在调用
    HostService()
    之前已经显示了该消息。除了我写的代码之外,似乎还有其他东西在尝试启动服务

    如何设置AppB,使其IP取决于它所使用的机器 她在跑步吗

    使用localhost作为所有AppB实例的基址

    如何设置AppA,使其能够动态连接到 在不同的IP地址上运行不同的AppB


    你必须这么做。然后,让某种运行时解析器根据某种查找选择适当的服务端点地址。

    我设法运行了该服务,客户机设法连接到该服务。服务和客户端都是在代码中完成的,而不是
    App.config
    (该文件未定义服务/端点/客户端)。但是,我注意到,在运行时,还有其他东西试图运行该服务。WcfSvcHost正在显示已停止的服务实例,详细信息为
    服务无法启动。此服务未定义终结点。请在配置文件中为服务添加至少一个端点,然后重试。
    。这发生在我手动实例化我的
    ServiceHost
    之前。您是否使用windows服务托管?@TomRedfern我通过代码自托管,服务绑定和端点都在代码中定义,服务通过调用
    open()启动
    在自定义
    ServiceHost
    实例上。您能发布您的服务端点的代码定义吗?@TomRedfern已更新。