如何:创建通道工厂并将其用于创建和管理频道

DuplexChannelFactory<TChannel> 类提供了创建和管理客户端用来向/从服务终结点发送和接收消息的不同类型的双工通道的方法。

示例

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

// 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($"{member} is ready");
        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);
    }
}

另请参阅