Exemplo de bate-papo WCF
Demonstra como implementar um aplicativo multiparty bate-papo usando PeerChannel.As mensagens enviadas por qualquer instância de um aplicativo de bate-papo são recebidas por todas as outras instâncias.
Para obter Zoom, Para Cima e Ampliar e instruções para instalá-los
Siga um ou mais destes procedimentos:
Sobre o Help menu, Zoom, Para Cima e Ampliar Exemplos.
O arquivo Leiame exibe informações sobre exemplos.
Visite o O Visual Studio 2008 Zoom, Para Cima e Ampliar Zoom, Para Cima e Ampliar site. As versões mais recentes dos exemplos estarão disponíveis nele.
Localize Zoom, Para Cima e Ampliar no computador em que Visual Studio está instalado. Por padrão, Zoom, Para Cima e Ampliar e um arquivo Leiame são instalados em unidade: \Arquivos de programas\Microsoft visual Studio 9.0\Zoom, Para Cima e Ampliar\LCID. Para edições Express do Visual Studio, todos os exemplos estão localizados on-line.
Para obter mais informações, consulte Localizando arquivos de exemplo.
Observação de segurança: |
---|
Esse código de exemplo é destinado a ilustrar um conceito, e ele mostra somente o código que é relevante para esse conceito. Ele pode não atender aos requisitos de segurança de um ambiente específico e não deve ser usado exatamente como mostrado. Recomendamos que você adicione código de segurança e tratamento de erros para tornar seus projetos tão seguros e robustos quanto for conveniente. A Microsoft fornece esse código de exemplo "Zoom, Para Cima e Ampliar encontra" sem garantias. |
Para executar este exemplo
Em Solution Explorer, abra ExcelAuto.sln.
Sempre que uma etapa se refere a um cliente ou um serviço, essas etapas se aplicam ao separar instâncias de amostra (porque a amostra de bate-papo é não um aplicativo cliente e de serviço).
Pressione F5 para executar o aplicativo.
Iniciar quantas instâncias (denominados instância e localizado no caminho de instalação Visual Basic \Projects\Chat\Instance\Bin\Debug\Instance.exe) como desejar.Comece inserindo um apelido que fará distinção mensagens enviadas de uma instância específica de cliente.Logo após esse nome é inserido, as mensagens de bate-papo podem ser enviadas para a malha.Essas mensagens devem ser enviadas para todas as outras instâncias que têm um nome distinto membro.(Ou seja, não será exibida uma mensagem a partir de um cliente que tem o mesmo nome, e um único cliente da própria mensagem não será enviada para a janela do console do cliente.)
Demonstra
O exemplo de bate-papo é não um aplicativo cliente e de serviço.É um aplicativo True ponto a ponto, na qual cada instância atua como um ponto de outras instâncias.Cada instância pode enviar mensagens para outras instâncias e receber mensagens de outras instâncias usando o contrato em frente e verso IChat.
Conceitos principais
PeerChannel é um multiparty, ponto a ponto (P2P) comunicação tecnologia na Base de Comunicação do Windows (WCF).Isso ajuda a habilitar mensagem segura, escalonável e confiável.Um exemplo comum de um aplicativo multiparty que pode se beneficiar de PeerChannel é um aplicativo de colaboração, como o bate-papo.No bate-papo, um grupo de pessoas se comunicar entre si de maneira ponto-a-sem servidores.PeerChannel permite P2P colaboração, distribuição de conteúdo, o balanceamento de carga e processamento distribuído para os cenários do consumidor e empresa.
PeerChannel apresenta os conceitos novos a seguir:
Um mesh é um conjunto nomeado (um gráfico interconectado) de nós ponto que pode se comunicar entre si e que cada são identificados por uma malha exclusivo identificação.
Observação: Ativas nós na malha publicar seus nomes de malha para que outros podem encontrá-los.Uma malha é ajustado para alterar associação, ele tem adaptável conectividade em um ambiente no qual nós são constantemente ingressar e deixar a malha e é otimizada dinamicamente para se adaptar às padrões de tráfego.
Nós Ativos de malha publicar seus nomes de malha para que outras pessoas podem encontrá-los.Uma malha ajusta a variáveis de membros, ele tem conectividade adaptável em um ambiente no qual nós são constantemente ingressando e deixando a malha, e ele dinamicamente é otimizado para adaptar-se aos padrões de tráfego.
Um Ponto nó é um ponto de extremidade em uma malha.Um único aplicativo pode ter vários nós ponto que participem de diferentes meshes.
Um resolvedor ponto é responsável por resolver uma identificação de malha para os endereços de ponto de extremidade de nós de malha.Um nó ponto usa esses endereços para se conectar a outros nós de malha.Isso permite que mensagens sejam propagadas durante a malha.
O bate-papo é um aplicativo Formulários do Windows.Cada instância de um aplicativo bate-papo cria um IDuplexChannel que tem o mesmo endereço de ponto de extremidade.Como todas as instâncias de um aplicativo bate-papo usam o mesmo endereço, uma mensagem enviada por uma instância do aplicativo é recebida por todas as outras instâncias no seu ponto de canal.
O aplicativo bate-papo define e implementa o contrato em frente e verso IChat.O contrato IChat permite somente operações unidirecionais porque o ServiceModel não suporta a paradigma única solicitação/várias-resposta.(Em um canal multiparty, uma solicitação única que é enviada para a malha pode gerar várias respostas.)
Este exemplo implementa uma função estática principal para criar um IClientChannel com o contrato em frente e verso IChat.A função usa o ponto de extremidade que está especificado na arquivo de configuração.
Todas as instâncias de bate-papo devem usar o mesmo endereço de ponto de extremidade para garantir que as mensagens enviadas por uma instância são recebidas por todas as outras instâncias.
Instâncias de bate-papo nesse exemplo localize entre si usando um Resolvedor Personalizado ou usando o resolvedor ponto padrão (PNRP).Observe que o PNRP não está disponível no Windows servidor 2003.Portanto, um resolvedor personalizado deve ser usado para executar esse exemplo em um sistema que está executando o Windows servidor 2003.Por padrão, esse exemplo é configurado para usar um resolvedor personalizado.Se um resolvedor personalizado ou o resolvedor padrão será usado é determinado pelo bate-papo ponto de extremidade definido a seguir arquivo de configuração.Para alternar para o resolvedor ponto padrão (PNRP), substitua BindingCustomResolver por BindingDefault em bindingConfiguration no arquivo de configuração do exemplo.
<!-- Chat instance participating in the mesh. -->
<endpoint name="ChatEndpoint"
address="net.p2p://chatMesh/ServiceModelSamples/Chat"
binding="netPeerTcpBinding"
bindingConfiguration="BindingCustomResolver"
contract="Microsoft.ServiceModel.Samples.IChat">
</endpoint>
Para ativar o nó ponto para comunicar-se com o serviço de mesmo nível canal personalizado ponto a ponto resolução, a configuração do ponto a ponto canal personalizado de mesmo nível o resolvedor do lado do cliente é definida na arquivo de configuração.
<!-- Client used to communicate with the custom resolver service. -->
<client>
<endpoint configurationName="CustomPeerResolverEndpoint"
address="net.tcp://localhost/ServiceModelsamples/peerResolverService"
binding="netTcpBinding"
bindingConfiguration="Binding3"
contract="Microsoft.ServiceModel.SamplesICustomPeerResolver">
</endpoint>
</client>
O endereço identifica o endereço do serviço de resolução.Se o resolvedor serviço estiver sendo executado em um computador remoto, substitua localhost um nome de domínio qualificado.
O exemplo também demonstra como recuperar o nó de mesmo nível de IClientChannel e como registrar para eventos on-line e off-line usando IOnlineStatus.Um evento on-line é iniciado quando o nó ponto está conectado para pelo menos um outro nó ponto no malha.Um evento off-line é iniciado quando o nó de mesmo nível não está mais conectado para qualquer outro nó ponto na malha.
Atualmente, os metadados não podem ser gerado porque um canal de mesmo nível não está integrado com o utilitário de metadados de serviço (Svcutil.exe).
Quando você executa a amostra, as bate-papo mensagens enviadas por uma instância do Bate-papo são exibidas nas janelas do console de outras instâncias do bate-papo.Pressione o Q chave seguido Enter em cada janela de console para fechar a instância.
Observação: |
---|
O exemplo no momento não manipula todas as possíveis exceções que pode acionar a infraestrutura.Se estiver usando esses exemplos em um ambiente comercial ou de produção, siga o manipulação de exceção apropriada práticas recomendadas. |