如何:创建通道工厂并用它创建和管理通道

通过 DuplexChannelFactory 类可以创建和管理不同类型的双工通道,客户端可以使用这些通道在服务终结点之间发送和接收消息。

示例

下面的代码演示如何创建通道工厂并用它来创建和管理通道。

// Construct InstanceContext to handle messages on the callback interface. 
// An instance of ChatApp is created and passed to the InstanceContext.
    InstanceContext site = new InstanceContext(new ChatApp());

// Create the participant with the given endpoint configuration.
// Each participant opens a duplex channel to the mesh.
// Participant is an instance of the chat application that has opened a channel to the mesh.

    using (DuplexChannelFactory<IChatChannel> cf =
        new DuplexChannelFactory<IChatChannel>(site,"ChatEndpoint"))
    {
        X509Certificate2 issuer = GetCertificate(
            StoreName.CertificateAuthority,
            StoreLocation.CurrentUser, "CN=" + issuerName,
            X509FindType.FindBySubjectDistinguishedName);
        cf.Credentials.Peer.Certificate =
            GetCertificate(StoreName.My,
            StoreLocation.CurrentUser,
            "CN=" + member,
            X509FindType.FindBySubjectDistinguishedName);
        cf.Credentials.Peer.PeerAuthentication.CertificateValidationMode  =
            X509CertificateValidationMode.Custom;
        cf.Credentials.Peer.PeerAuthentication.CustomCertificateValidator =
            new IssuerBasedValidator();

        using (IChatChannel participant = cf.CreateChannel())
        {
    // Retrieve the PeerNode associated with the participant and register for online/offline events.
    // PeerNode represents a node in the mesh. Mesh is the named collection of connected nodes.
            IOnlineStatus ostat = participant.GetProperty<IOnlineStatus>();
            ostat.Online += new EventHandler(OnOnline);
            ostat.Offline += new EventHandler(OnOffline);

            Console.WriteLine("{0} is ready", member);
            Console.WriteLine("Press <ENTER> to send the chat message.");                   

    // Announce self to other participants.
            participant.Join(member);
            Console.ReadLine();
            participant.Chat(member, "Hi there - I am chatting");

            Console.WriteLine("Press <ENTER> to terminate this instance of chat.");
            Console.ReadLine();
    // Leave the mesh and close the client.
            participant.Leave(member);
        }
    }

另请参见

参考

DuplexChannelFactory