語言

ChannelFactory<TChannel> 類別

定義

建立客戶端用來將訊息傳送至各種設定服務端點之不同類型通道的處理站。

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或 。

繼承
ChannelFactory<TChannel>
衍生
實作

範例

以下範例展示了如何建立通道工廠,並用它來建立和管理通道。

    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
Abort()

會使通訊物件立即從當前狀態轉換到關閉狀態。

(繼承來源 CommunicationObject)
ApplyConfiguration(String)

初始化通道工廠時,依據指定的設定檔及通道工廠服務端點的行為。

(繼承來源 ChannelFactory)
BeginClose(AsyncCallback, Object)

開始異步操作以關閉通訊物件。

(繼承來源 CommunicationObject)
BeginClose(TimeSpan, AsyncCallback, Object)

開始異步操作,以關閉具有指定逾時的通訊物件。

(繼承來源 CommunicationObject)
BeginOpen(AsyncCallback, Object)

開始異步操作以開啟通訊物件。

(繼承來源 CommunicationObject)
BeginOpen(TimeSpan, AsyncCallback, Object)

開始異步操作,以在指定的時間間隔內開啟通訊物件。

(繼承來源 CommunicationObject)
Close()

使通訊物件從其目前狀態轉換成已關閉狀態。

(繼承來源 CommunicationObject)
Close(TimeSpan)

使通訊物件在指定時間間隔內從當前狀態轉換到封閉狀態。

(繼承來源 CommunicationObject)
CreateChannel()

建立指定類型的通道,連接到指定的端點位址。

CreateChannel(Binding, EndpointAddress, Uri)

建立指定類型的通道,用來向指定傳輸位址的服務端點發送訊息,該位址已設定為指定綁定。

CreateChannel(Binding, EndpointAddress)

建立指定類型的通道,用來向已設定指定綁定的服務端點發送訊息。

CreateChannel(EndpointAddress, Uri)

建立一個通道,透過指定的傳輸位址向特定端點位址的服務發送訊息。

CreateChannel(EndpointAddress)

建立一個通道,用於向特定端點位址的服務發送訊息。

CreateChannel(String)

建立一個通道,用來向端點設定特定方式的服務發送訊息。

CreateChannelWithActAsToken(SecurityToken, EndpointAddress, Uri)

建立一個通道,用於透過指定的傳輸位址,將訊息傳送給服務,並在特定端點位址作為安全權杖。

CreateChannelWithActAsToken(SecurityToken, EndpointAddress)

建立一個通道,用於向特定端點位址的安全令牌發送訊息給服務。

CreateChannelWithActAsToken(SecurityToken)

建立一個通道,用於傳送訊息給服務,並以安全令牌作為安全標記。

CreateChannelWithIssuedToken(SecurityToken, EndpointAddress, Uri)

建立一個通道,透過指定的傳輸位址,將安全令牌已發出給特定端點位址的服務傳送訊息。

CreateChannelWithIssuedToken(SecurityToken, EndpointAddress)

建立一個通道,用於在特定端點位址發送安全令牌給服務。

CreateChannelWithIssuedToken(SecurityToken)

建立一個通道,用來向擁有已發出安全令牌的服務發送訊息。

CreateChannelWithOnBehalfOfToken(SecurityToken, EndpointAddress, Uri)

建立一個通道,透過指定的傳輸位址,在特定端點位址以安全令牌向服務發送訊息。

CreateChannelWithOnBehalfOfToken(SecurityToken, EndpointAddress)

建立一個通道,用於在特定端點位址以安全令牌向服務發送訊息。

CreateChannelWithOnBehalfOfToken(SecurityToken)

建立一個通道,用來向服務發送訊息,並以安全令牌代為執行。

CreateDescription()

建立服務端點的描述。

CreateFactory()

為工廠目前端點建造通道工廠。

(繼承來源 ChannelFactory)
EndClose(IAsyncResult)

完成異步操作以關閉通訊物件。

(繼承來源 CommunicationObject)
EndOpen(IAsyncResult)

完成異步操作以開啟通訊物件。

(繼承來源 CommunicationObject)
EnsureOpened()

如果目前的通道工廠尚未啟用,則會開啟它。

(繼承來源 ChannelFactory)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
Fault()

會使通訊物件從當前狀態轉換到故障狀態。

(繼承來源 CommunicationObject)
GetCommunicationObjectType()

取得通訊對象的類型。

(繼承來源 CommunicationObject)
GetHashCode()

做為預設哈希函式。

(繼承來源 Object)
GetProperty<T>()

回傳從通道堆疊中適當層請求的類型物件(若存在),若 null 不存在則回傳。

(繼承來源 ChannelFactory)
GetType()

取得目前實例的 Type。

(繼承來源 Object)
InitializeEndpoint(Binding, EndpointAddress)

初始化通道工廠的服務端點,並指定綁定與位址。

(繼承來源 ChannelFactory)
InitializeEndpoint(ServiceEndpoint)

以指定的終端初始化通道工廠的服務端點。

(繼承來源 ChannelFactory)
InitializeEndpoint(String, EndpointAddress)

以指定的位址與設定初始化通道工廠的服務端點。

(繼承來源 ChannelFactory)
MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
OnAbort()

終止現有通道工廠的內側通道工廠。

(繼承來源 ChannelFactory)
OnBeginClose(TimeSpan, AsyncCallback, Object)

開始對當前通道工廠的內通道工廠進行非同步閉操作,該工廠與其關聯的狀態物件。

(繼承來源 ChannelFactory)
OnBeginOpen(TimeSpan, AsyncCallback, Object)

開始對當前通道工廠內通道工廠進行非同步開放操作,該工廠與其關聯的狀態物件。

(繼承來源 ChannelFactory)
OnClose(TimeSpan)

通話會在內通道工廠關閉,並設定操作完成的逾時時間。

(繼承來源 ChannelFactory)
OnClosed()

在通訊物件轉換到關閉狀態時被呼叫。

(繼承來源 CommunicationObject)
OnClosing()

在通訊物件轉換到關閉狀態時被呼叫。

(繼承來源 CommunicationObject)
OnEndClose(IAsyncResult)

完成對現有通道工廠內通道工廠的非同步閉門操作。

(繼承來源 ChannelFactory)
OnEndOpen(IAsyncResult)

完成對現有通道工廠內通道工廠的非同步開放操作。

(繼承來源 ChannelFactory)
OnFaulted()

在通訊物件因呼叫同步故障操作而轉換到故障狀態後,插入處理程序。

(繼承來源 CommunicationObject)
OnOpen(TimeSpan)

呼叫會在當前通道工廠的內通道工廠開啟,並指定操作完成的逾時。

(繼承來源 ChannelFactory)
OnOpened()

初始化一個唯讀的物件副本 ClientCredentials ,用於通道工廠。

(繼承來源 ChannelFactory)
OnOpening()

為現有水道建造內部水道工廠。

(繼承來源 ChannelFactory)
Open()

使通訊物件從已建立的狀態轉換成開啟的狀態。

(繼承來源 CommunicationObject)
Open(TimeSpan)

使通訊物件在指定的時間間隔內,從建立的狀態轉換成開啟的狀態。

(繼承來源 CommunicationObject)
ThrowIfDisposed()

若通訊物件被丟棄,則拋出例外。

(繼承來源 CommunicationObject)
ThrowIfDisposedOrImmutable()

如果通訊物件 該 State 屬性未設定為 Created 狀態,則會拋出例外。

(繼承來源 CommunicationObject)
ThrowIfDisposedOrNotOpen()

如果通訊物件不在該 Opened 狀態,會拋出例外。

(繼承來源 CommunicationObject)
ToString()

傳回表示目前 物件的字串。

(繼承來源 Object)

事件

名稱 Description
Closed

當通訊物件轉換到封閉狀態時,會發生這種情況。

(繼承來源 CommunicationObject)
Closing

當通訊物件轉換到關閉狀態時,會發生這種情況。

(繼承來源 CommunicationObject)
Faulted

當通訊物件轉換到錯誤狀態時,會發生這種情況。

(繼承來源 CommunicationObject)
Opened

當通訊物件轉換進入開啟狀態時,會發生這種情況。

(繼承來源 CommunicationObject)
Opening

當通訊物件轉換到開啟狀態時,會發生這種情況。

(繼承來源 CommunicationObject)

明確介面實作

名稱 Description
IAsyncDisposable.DisposeAsync()

建立客戶端用來將訊息傳送至各種設定服務端點之不同類型通道的處理站。

(繼承來源 ChannelFactory)
IDisposable.Dispose()

關閉現有的通道工廠。

(繼承來源 ChannelFactory)

適用於

執行緒安全性

此類型是安全線程。