共用方式為


如何:建立通道處理站,並用它來建立和管理通道

類別 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);
    }
}

另請參閱