DuplexClientBase<TChannel> 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
用來建立雙工服務的通道,並將該通道與回呼對象產生關聯。
generic <typename TChannel>
where TChannel : classpublic ref class DuplexClientBase abstract : System::ServiceModel::ClientBase<TChannel>
public abstract class DuplexClientBase<TChannel> : System.ServiceModel.ClientBase<TChannel> where TChannel : class
type DuplexClientBase<'Channel (requires 'Channel : null)> = class
inherit ClientBase<'Channel (requires 'Channel : null)>
Public MustInherit Class DuplexClientBase(Of TChannel)
Inherits ClientBase(Of TChannel)
類型參數
- TChannel
要建立之通道的類型。
- 繼承
範例
下列範例示範在雙工 WCF 用戶端類型的用戶端中使用 ,SampleDuplexHelloClient
,以使用回呼對象傳遞新的 System.ServiceModel.InstanceContext 物件來接聽回呼。
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
[CallbackBehaviorAttribute(
IncludeExceptionDetailInFaults= true,
UseSynchronizationContext=true,
ValidateMustUnderstand=true
)]
public class Client : SampleDuplexHelloCallback
{
AutoResetEvent waitHandle;
public Client()
{
waitHandle = new AutoResetEvent(false);
}
public void Run()
{
// Picks up configuration from the configuration file.
SampleDuplexHelloClient wcfClient
= new SampleDuplexHelloClient(new InstanceContext(this), "WSDualHttpBinding_SampleDuplexHello");
try
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Enter a greeting to send and press ENTER: ");
Console.Write(">>> ");
Console.ForegroundColor = ConsoleColor.Green;
string greeting = Console.ReadLine();
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Called service with: \r\n\t" + greeting);
wcfClient.Hello(greeting);
Console.WriteLine("Execution passes service call and moves to the WaitHandle.");
this.waitHandle.WaitOne();
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("Set was called.");
Console.Write("Press ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("ENTER");
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write(" to exit...");
Console.ReadLine();
}
catch (TimeoutException timeProblem)
{
Console.WriteLine("The service operation timed out. " + timeProblem.Message);
Console.ReadLine();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
Console.ReadLine();
}
}
public static void Main()
{
Client client = new Client();
client.Run();
}
public void Reply(string response)
{
Console.WriteLine("Received output.");
Console.WriteLine("\r\n\t" + response);
this.waitHandle.Set();
}
}
}
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Threading
Namespace Microsoft.WCF.Documentation
<CallbackBehaviorAttribute(IncludeExceptionDetailInFaults:= True, UseSynchronizationContext:=True, ValidateMustUnderstand:=True)> _
Public Class Client
Implements SampleDuplexHelloCallback
Private waitHandle As AutoResetEvent
Public Sub New()
waitHandle = New AutoResetEvent(False)
End Sub
Public Sub Run()
' Picks up configuration from the configuration file.
Dim wcfClient As New SampleDuplexHelloClient(New InstanceContext(Me), "WSDualHttpBinding_SampleDuplexHello")
Try
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Enter a greeting to send and press ENTER: ")
Console.Write(">>> ")
Console.ForegroundColor = ConsoleColor.Green
Dim greeting As String = Console.ReadLine()
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Called service with: " & Constants.vbCrLf & Constants.vbTab & greeting)
wcfClient.Hello(greeting)
Console.WriteLine("Execution passes service call and moves to the WaitHandle.")
Me.waitHandle.WaitOne()
Console.ForegroundColor = ConsoleColor.Blue
Console.WriteLine("Set was called.")
Console.Write("Press ")
Console.ForegroundColor = ConsoleColor.Red
Console.Write("ENTER")
Console.ForegroundColor = ConsoleColor.Blue
Console.Write(" to exit...")
Console.ReadLine()
Catch timeProblem As TimeoutException
Console.WriteLine("The service operation timed out. " & timeProblem.Message)
Console.ReadLine()
Catch commProblem As CommunicationException
Console.WriteLine("There was a communication problem. " & commProblem.Message)
Console.ReadLine()
End Try
End Sub
Public Shared Sub Main()
Dim client As New Client()
client.Run()
End Sub
Public Sub Reply(ByVal response As String) Implements SampleDuplexHelloCallback.Reply
Console.WriteLine("Received output.")
Console.WriteLine(Constants.vbCrLf & Constants.vbTab & response)
Me.waitHandle.Set()
End Sub
End Class
End Namespace
備註
使用 DuplexClientBase<TChannel> 類別來建立指定回呼對象的服務通道。 DuplexClientBase<TChannel> 物件會包裝 System.ServiceModel.DuplexChannelFactory<TChannel> 物件,以提供WCF對象的連線能力。 您可以使用任一類型來連線到雙工服務。 如需雙工服務的詳細資訊,請參閱 雙工服務。
衍生自此類別之 Managed C++使用者的特殊注意事項:
將您的清除程序代碼放在 (On)(Begin)Close (and/或 OnAbort),而不是在解構函式中。
避免解構函式:它們會導致編譯程式自動產生 IDisposable
避免非參考成員:它們可能會導致編譯程式自動產生 IDisposable
避免完成項;但是,如果您包含一個,您應該隱藏組建警告,並從 (On)(Begin)Close (and/或 OnAbort) 呼叫 SuppressFinalize(Object) 和完成項本身,以模擬自動產生的 IDisposable 行為。
建構函式
屬性
Channel |
取得用來將訊息傳送至各種設定服務端點的內部通道。 (繼承來源 ClientBase<TChannel>) |
ChannelFactory |
取得基礎 ChannelFactory<TChannel> 物件。 (繼承來源 ClientBase<TChannel>) |
ClientCredentials |
取得用來呼叫作業的客戶端認證。 (繼承來源 ClientBase<TChannel>) |
Endpoint |
取得 WCF 用戶端可以連線之服務的目標端點。 (繼承來源 ClientBase<TChannel>) |
InnerChannel |
取得基礎 IClientChannel 實作。 (繼承來源 ClientBase<TChannel>) |
InnerDuplexChannel |
取得雙工通道的基礎 IClientChannel 實作。 |
State |
取得 ClientBase<TChannel> 物件的目前狀態。 (繼承來源 ClientBase<TChannel>) |
方法
Abort() |
讓 ClientBase<TChannel> 物件立即從其目前狀態轉換成已關閉狀態。 (繼承來源 ClientBase<TChannel>) |
Close() |
使 ClientBase<TChannel> 物件從目前狀態轉換成關閉狀態。 (繼承來源 ClientBase<TChannel>) |
CloseAsync() |
用來建立雙工服務的通道,並將該通道與回呼對象產生關聯。 (繼承來源 ClientBase<TChannel>) |
CreateChannel() |
將通道傳回至與傳遞至建構函式之回呼對象相關聯的服務。 |
CreateChannel() |
傳回服務的新通道。 (繼承來源 ClientBase<TChannel>) |
DisplayInitializationUI() |
指示內部通道在使用通道之前,如果需要先初始化通道,就會顯示使用者介面。 (繼承來源 ClientBase<TChannel>) |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
GetDefaultValueForInitialization<T>() |
復寫 C# 中預設關鍵詞的行為。 (繼承來源 ClientBase<TChannel>) |
GetHashCode() |
做為預設哈希函式。 (繼承來源 Object) |
GetType() |
取得目前實例的 Type。 (繼承來源 Object) |
InvokeAsync(ClientBase<TChannel>.BeginOperationDelegate, Object[], ClientBase<TChannel>.EndOperationDelegate, SendOrPostCallback, Object) |
提供實作事件架構異步模式的支援。 如需此模式的詳細資訊,請參閱 事件架構異步模式概觀。 (繼承來源 ClientBase<TChannel>) |
MemberwiseClone() |
建立目前 Object的淺層複本。 (繼承來源 Object) |
Open() |
使 ClientBase<TChannel> 物件從已建立的狀態轉換成開啟的狀態。 (繼承來源 ClientBase<TChannel>) |
ToString() |
傳回表示目前 物件的字串。 (繼承來源 Object) |
明確介面實作
擴充方法
ConfigureAwait(IAsyncDisposable, Boolean) |
設定如何執行從異步可處置專案傳回的工作等候。 |