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
    interface ICommunicationObject
    interface IChannelFactory<'Channel>
type ChannelFactory<'Channel> = class
    inherit ChannelFactory
    interface IChannelFactory<'Channel>
    interface IChannelFactory
    interface ICommunicationObject
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 屬性,再建立任何通道。 如需程式碼範例,請參閱「範例」一節。

使用此型別的用戶端或呼叫應用程式 (例如,中間層應用程式也是用戶端應用程式),除了效能需求之外,常常也有複雜的狀態管理需求。 如需這些案例的詳細資訊,請參閱 仲介層用戶端應用程式

建構函式

ChannelFactory<TChannel>()

初始化 ChannelFactory<TChannel> 類別的新執行個體。

ChannelFactory<TChannel>(Binding)

初始化 ChannelFactory<TChannel> 類別的新執行個體。

ChannelFactory<TChannel>(Binding, EndpointAddress)

使用指定的繫結與端點位址,來初始化 ChannelFactory<TChannel> 類別的新執行個體。

ChannelFactory<TChannel>(Binding, String)

使用指定的繫結與遠端位址,來初始化 ChannelFactory<TChannel> 類別的新執行個體。

ChannelFactory<TChannel>(ServiceEndpoint)

初始化 ChannelFactory<TChannel> 類別的新執行個體,以使用指定端點來產生通道。

ChannelFactory<TChannel>(String)

使用指定的端點組態名稱,來初始化 ChannelFactory<TChannel> 類別的新執行個體。

ChannelFactory<TChannel>(String, EndpointAddress)

以指定的端點組態名稱與遠端位址,來初始化 ChannelFactory<TChannel> 類別的新執行個體。

ChannelFactory<TChannel>(Type)

初始化 ChannelFactory<TChannel> 類別的新執行個體。

屬性

Credentials

取得認證,用戶端會在處理站產生的通道上使用該認證與服務端點通訊。

(繼承來源 ChannelFactory)
DefaultCloseTimeout

取得針對要完成之關閉作業所提供的預設時間間隔。

(繼承來源 ChannelFactory)
DefaultOpenTimeout

取得針對要完成之開啟作業所提供的預設時間間隔。

(繼承來源 ChannelFactory)
Endpoint

取得由處理站產生的通道所要連接的服務端點。

(繼承來源 ChannelFactory)
IsDisposed

取得值,這個值會指出是否已經處置通訊物件。

(繼承來源 CommunicationObject)
State

取得值,這個值表示通訊物件目前的狀態。

(繼承來源 CommunicationObject)
ThisLock

取得會在狀態轉換期間保護類別執行個體的互斥鎖定。

(繼承來源 CommunicationObject)

方法

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)

建立用來傳送訊息至服務端點之指定型別的通道,此服務端點採用指定的繫結設定。

CreateChannel(Binding, EndpointAddress, Uri)

建立用來傳送訊息至服務端點之指定型別的通道,在指定傳輸位址的此服務端點採用指定的繫結設定。

CreateChannel(EndpointAddress)

建立用來傳送訊息至指定端點位址的服務的通道。

CreateChannel(EndpointAddress, Uri)

建立一個透過指定傳輸位址將訊息傳送至指定端點位址的服務的通道。

CreateChannel(String)

建立用來傳送訊息至指定端點位址的服務的通道,此服務的端點採用特定方式設定。

CreateChannelWithActAsToken(SecurityToken)

建立用來將訊息傳送至具有扮演安全性權杖之服務的通道。

CreateChannelWithActAsToken(SecurityToken, EndpointAddress)

用來將訊息傳送至位於特定端點位址做為安全性權杖之服務的建立通道。

CreateChannelWithActAsToken(SecurityToken, EndpointAddress, Uri)

建立一個通道,這個通道可用來透過指定傳輸位址將訊息傳送至指定端點位址上做為安全性權杖的服務。

CreateChannelWithIssuedToken(SecurityToken)

用來將訊息傳送至具有已簽發安全性權杖之服務的建立通道。

CreateChannelWithIssuedToken(SecurityToken, EndpointAddress)

用來將訊息傳送至位於特定端點位址具有發行的安全性權杖之服務的建立通道。

CreateChannelWithIssuedToken(SecurityToken, EndpointAddress, Uri)

建立一個通道,這個通道可用來透過指定傳輸位址將訊息傳送至指定端點位址上具有發行之安全性權杖的服務。

CreateChannelWithOnBehalfOfToken(SecurityToken)

用來將訊息傳送至具有代表安全性權杖之服務的建立通道。

CreateChannelWithOnBehalfOfToken(SecurityToken, EndpointAddress)

用來將訊息傳送至位於特定端點位址具有代表安全性權杖之服務的建立通道。

CreateChannelWithOnBehalfOfToken(SecurityToken, EndpointAddress, Uri)

建立一個通道,這個通道可用來透過指定傳輸位址將訊息傳送至指定端點位址上代表安全性權杖的服務。

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)

事件

Closed

當通訊物件轉換至已關閉狀態時發生。

(繼承來源 CommunicationObject)
Closing

當通訊物件轉換至關閉狀態時就會發生。

(繼承來源 CommunicationObject)
Faulted

當通訊物件轉換至錯誤狀態時發生。

(繼承來源 CommunicationObject)
Opened

當通訊物件轉換至已開啟狀態時發生。

(繼承來源 CommunicationObject)
Opening

當通訊物件轉換至開啟狀態時發生。

(繼承來源 CommunicationObject)

明確介面實作

IDisposable.Dispose()

關閉目前的通道處理站。

(繼承來源 ChannelFactory)

適用於

執行緒安全性

此型別具備執行緒安全。