0

チャットアプリの利用可能なMicrosoftの例を使用して、ピアツーピアWCFを使用するようにVB.Net3.5アプリを変換しました。サンプルの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>

よろしくお願いします。

4

1 に答える 1

0

私は答えを見つけたと信じています。(一方向操作コントラクトのため) バブリングしていない例外があり、そのインスタンスがダウンしました。ダウンすると、それ以上のメッセージは機能しません。MS が少なくともこれらの例外を出力スタックに置くとよいでしょう。エラーを適切に処理したので、メッセージはすべてのクライアントに送信されます。注意すべきことの 1 つは、一方向のコントラクトを使用している場合、例外をクライアントにバブルできないことです。4 つのピアに例外があった場合、どの例外が発生するか (4 つすべてですか?) を理解していると思います。したがって、メッセージがブロードキャストされるピア メッシュでは、いかなる種類の応答も取得できないことは理にかなっていると思います。

于 2010-05-01T17:05:17.750 に答える