Приложение WCF, использующее приложение Peer Chat в качестве примера, не работает - PullRequest
0 голосов
/ 01 мая 2010

Я преобразовал приложение 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 голосов
/ 01 мая 2010

Мне кажется, я понял ответ. У меня было исключение, которое не пузырилось (из-за контракта об односторонней работе), и это уничтожило бы этот экземпляр. Как только он отключился, сообщения больше не будут работать. Было бы хорошо, если бы MS хотя бы поместила эти исключения в стек вывода. Теперь, когда я корректно обрабатываю ошибки, сообщения отправляются всем клиентам. Стоит отметить, что если вы используете односторонний контракт, вы не можете отправлять клиенту исключения. Полагаю, я понимаю, поскольку, если бы у 4 пиров были исключения, какое исключение вы бы получили (все 4?), Поэтому я думаю, что имеет смысл, что в одноранговой сетке, где сообщения передаются, вы не сможете получать ответы любого рода.

...