ChannelFactory<TChannel> 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
建立客戶端用來將訊息傳送至各種設定服務端點之不同類型通道的處理站。
generic <typename TChannel>
public ref class ChannelFactory : System::ServiceModel::ChannelFactory, System::ServiceModel::Channels::IChannelFactory<TChannel>
public class ChannelFactory<TChannel> : System.ServiceModel.ChannelFactory, System.ServiceModel.Channels.IChannelFactory<TChannel>
type ChannelFactory<'Channel> = class
inherit ChannelFactory
interface IChannelFactory<'Channel>
interface IChannelFactory
interface ICommunicationObject
type ChannelFactory<'Channel> = class
inherit ChannelFactory
interface IChannelFactory
interface ICommunicationObject
interface IChannelFactory<'Channel>
Public Class ChannelFactory(Of TChannel)
Inherits ChannelFactory
Implements IChannelFactory(Of TChannel)
類型參數
- TChannel
由渠道工廠生產的渠道類型。 此類型必須為IOutputChannelIRequestChannel或 。
- 繼承
- 衍生
- 實作
範例
以下範例展示了如何建立通道工廠,並用它來建立和管理通道。
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://localhost:8000/ChannelApp");
ChannelFactory<IRequestChannel> factory =
new ChannelFactory<IRequestChannel>(binding, address);
IRequestChannel channel = factory.CreateChannel();
channel.Open();
Message request = Message.CreateMessage(MessageVersion.Soap11, "hello");
Message reply = channel.Request(request);
Console.Out.WriteLine(reply.Headers.Action);
reply.Close();
channel.Close();
factory.Close();
}
以下程式碼範例展示了如何在工廠建立通道物件之前,以程式方式插入客戶端行為。
public class Client
{
public static void Main()
{
try
{
// Picks up configuration from the config file.
ChannelFactory<ISampleServiceChannel> factory
= new ChannelFactory<ISampleServiceChannel>("WSHttpBinding_ISampleService");
// Add the client side behavior programmatically to all created channels.
factory.Endpoint.Behaviors.Add(new EndpointBehaviorMessageInspector());
ISampleServiceChannel wcfClientChannel = factory.CreateChannel();
// Making calls.
Console.WriteLine("Enter the greeting to send: ");
string greeting = Console.ReadLine();
Console.WriteLine("The service responded: " + wcfClientChannel.SampleMethod(greeting));
Console.WriteLine("Press ENTER to exit:");
Console.ReadLine();
// Done with service.
wcfClientChannel.Close();
Console.WriteLine("Done!");
}
catch (TimeoutException timeProblem)
{
Console.WriteLine("The service operation timed out. " + timeProblem.Message);
Console.Read();
}
catch (FaultException<SampleFault> fault)
{
Console.WriteLine("SampleFault fault occurred: {0}", fault.Detail.FaultMessage);
Console.Read();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
Console.Read();
}
}
Public Class Client
Public Shared Sub Main()
Try
' Picks up configuration from the config file.
Dim factory As New ChannelFactory(Of ISampleServiceChannel)("WSHttpBinding_ISampleService")
' Add the client side behavior programmatically to all created channels.
factory.Endpoint.Behaviors.Add(New EndpointBehaviorMessageInspector())
Dim wcfClientChannel As ISampleServiceChannel = factory.CreateChannel()
' Making calls.
Console.WriteLine("Enter the greeting to send: ")
Dim greeting As String = Console.ReadLine()
Console.WriteLine("The service responded: " & wcfClientChannel.SampleMethod(greeting))
Console.WriteLine("Press ENTER to exit:")
Console.ReadLine()
' Done with service.
wcfClientChannel.Close()
Console.WriteLine("Done!")
Catch timeProblem As TimeoutException
Console.WriteLine("The service operation timed out. " & timeProblem.Message)
Console.Read()
Catch fault As FaultException(Of SampleFault)
Console.WriteLine("SampleFault fault occurred: {0}", fault.Detail.FaultMessage)
Console.Read()
Catch commProblem As CommunicationException
Console.WriteLine("There was a communication problem. " & commProblem.Message)
Console.Read()
End Try
End Sub
備註
此通用類別允許更進階的情境,需要建立一個通道工廠,以建立多種通道類型。
在程式化新增行為時,行為會在建立任何通道前,先加入適當的 Behaviors 屬性 ChannelFactory 。 請參見範例部分的程式碼範例。
通常使用此類型的客戶端或呼叫應用程式(例如中階應用程式也是客戶端應用)也有複雜的狀態管理需求與效能需求。 欲了解更多相關情境資訊,請參閱 Middle-Tier 客戶應用程式。
建構函式
| 名稱 | Description |
|---|---|
| ChannelFactory<TChannel>() |
初始化 ChannelFactory<TChannel> 類別的新執行個體。 |
| ChannelFactory<TChannel>(Binding, EndpointAddress) |
初始化一個以指定綁定與端點位址的新類別實例 ChannelFactory<TChannel> 。 |
| ChannelFactory<TChannel>(Binding, String) |
初始化一個新的類別實例 ChannelFactory<TChannel> ,並指定綁定與遠端位址。 |
| ChannelFactory<TChannel>(Binding) |
初始化 ChannelFactory<TChannel> 類別的新執行個體。 |
| ChannelFactory<TChannel>(ServiceEndpoint) |
初始化一個新的類別實例 ChannelFactory<TChannel> ,產生具有指定端點的通道。 |
| ChannelFactory<TChannel>(String, EndpointAddress) |
初始化一個與指定名稱相關的類別實例 ChannelFactory<TChannel> ,用於端點設定及遠端位址。 |
| ChannelFactory<TChannel>(String) |
初始化一個以指定端點配置名稱的新 ChannelFactory<TChannel> 類別實例。 |
| ChannelFactory<TChannel>(Type) |
初始化 ChannelFactory<TChannel> 類別的新執行個體。 |
屬性
| 名稱 | Description |
|---|---|
| Credentials |
取得用戶端用來透過工廠產生的通道與服務端通訊的憑證。 (繼承來源 ChannelFactory) |
| DefaultCloseTimeout |
取得預設的近距離操作完成時間間隔。 (繼承來源 ChannelFactory) |
| DefaultOpenTimeout |
取得預設的開放操作完成時間間隔。 (繼承來源 ChannelFactory) |
| Endpoint |
取得工廠產生的通道連接的服務端點。 (繼承來源 ChannelFactory) |
| IsDisposed |
會得到一個值,表示通訊物件是否已被處置。 (繼承來源 CommunicationObject) |
| State |
會得到一個表示通訊物件當前狀態的值。 (繼承來源 CommunicationObject) |
| ThisLock |
取得互斥鎖,保護類別實例在狀態轉換期間。 (繼承來源 CommunicationObject) |
方法
事件
| 名稱 | Description |
|---|---|
| Closed |
當通訊物件轉換到封閉狀態時,會發生這種情況。 (繼承來源 CommunicationObject) |
| Closing |
當通訊物件轉換到關閉狀態時,會發生這種情況。 (繼承來源 CommunicationObject) |
| Faulted |
當通訊物件轉換到錯誤狀態時,會發生這種情況。 (繼承來源 CommunicationObject) |
| Opened |
當通訊物件轉換進入開啟狀態時,會發生這種情況。 (繼承來源 CommunicationObject) |
| Opening |
當通訊物件轉換到開啟狀態時,會發生這種情況。 (繼承來源 CommunicationObject) |
明確介面實作
| 名稱 | Description |
|---|---|
| IAsyncDisposable.DisposeAsync() |
建立客戶端用來將訊息傳送至各種設定服務端點之不同類型通道的處理站。 (繼承來源 ChannelFactory) |
| IDisposable.Dispose() |
關閉現有的通道工廠。 (繼承來源 ChannelFactory) |
適用於
執行緒安全性
此類型是安全線程。