以Peer Chat应用程序为例的WCF应用程序不起作用

时间:2010-05-01 15:21:33

标签: wcf sample p2p

我使用聊天应用程序的可用Microsoft示例将VB .Net 3.5应用程序转换为使用对等WCF。我确保我复制了示例的app.config文件(修改了我的应用程序的名称),添加了适当的引用。我按照所有教程,在我的应用程序代码中添加了相应的标签和结构。一切都运行没有任何错误,但客户只从自己而不是从其他客户端获取消息。示例聊天应用程序可以与多个客户端一起运行。我能找到的唯一区别是样本上的服务器是针对框架2.0的,但我认为这是错误的,并且它至少在3.0中构建它或者System.ServiceModel引用会中断。是否需要注册样本在幕后进行的操作或样本是否为特殊项目类型?我很迷惑。我的下一步是将我的所有类和逻辑从我的应用程序复制到示例应用程序,但这可能需要做很多工作 这是我的客户端App.config:

        <client><endpoint name="thldmEndPoint" 
                            address="net.p2p://thldmMesh/thldmServer"
            binding="netPeerTcpBinding" 
                            bindingConfiguration="PeerTcpConfig"
            contract="THLDM_Client.IGameService"></endpoint></client>
    <bindings><netPeerTcpBinding>
            <binding name="PeerTcpConfig" port="0">
                <security mode="None"></security>
                <resolver mode="Custom">
                    <custom address="net.tcp://localhost/thldmServer" binding="netTcpBinding"
                bindingConfiguration="TcpConfig"></custom>
                </resolver>
            </binding></netPeerTcpBinding>
        <netTcpBinding>
            <binding name="TcpConfig">
                <security mode="None"></security>
            </binding>
        </netTcpBinding>
    </bindings>

这是我的服务器App.config:

        <services>
        <service name="System.ServiceModel.PeerResolvers.CustomPeerResolverService">
            <host>
                <baseAddresses>
                    <add baseAddress="net.tcp://localhost/thldmServer"/>
                </baseAddresses>
            </host>
            <endpoint address="net.tcp://localhost/thldmServer" 
                                binding="netTcpBinding"
              bindingConfiguration="TcpConfig"
              contract="System.ServiceModel.PeerResolvers.IPeerResolverContract">
            </endpoint>
        </service>
    </services>
    <bindings>
        <netTcpBinding>
            <binding name="TcpConfig">
                <security mode="None"></security>
            </binding>
        </netTcpBinding>
    </bindings>

提前致谢。

1 个答案:

答案 0 :(得分:0)

我相信我找到了答案。我有一个没有冒泡的异常(由于单向操作合同),这将取消该实例。一旦它关闭,没有更多的消息可以工作。如果MS至少将这些异常放在输出堆栈上会很好。现在我优雅地处理错误,将消息发送给所有客户端。需要注意的一点是,如果您使用的是单向合同,则无法以任何方式向客户端发送异常。我想我明白了,因为如果4个对等体有异常,你会得到哪个异常(全部4个?)所以我想在广播消息的对等网格中你不能得到任何类型的回复是有道理的。