使用 SQL 配接器建立通道
在 WCF 通道模型中,您會在 SQL Server 資料庫上叫用作業,並透過 WCF 通道與 Microsoft BizTalk Adapter 交換 SOAP 訊息,以 SQL Server接收結果。
您可以使用 IRequestChannel 或 IOutputChannel 叫用輸出作業,以將訊息傳送至配接器。
透過 IInputChannel 接收 Polling、 TypedPolling或 Notification 作業的訊息,即可接收輸入作業的訊息。
本主題中的程式提供如何建立和設定用於輸入和輸出作業的通道圖形的相關資訊。
建立輸出 (用戶端) 通道
您可以使用IRequestChannel或IOutputChannel來叫用SQL Server資料庫的作業。 不論是哪一種情況,您都先使用適當的介面建立 System.ServiceModel.ChannelFactory 。 接著,您可以使用 Factory 來建立通道。 建立通道之後,您可以使用通道在配接器上叫用作業。
若要建立和開啟輸出通道
使用端點和系結,建立和初始化所需通道圖形的 ChannelFactory 實例。 端點會指定SQL Server連線 URI,而系結是sqlBinding的實例。
使用Credentials屬性,為通道處理站提供SQL Server認證。
開啟通道處理站。
叫用通道處理站上的 CreateChannel 方法,以取得通道的實例。
開啟通道。
您可以在程式碼或組態中指定系結和端點位址。
在程式碼中指定系結和端點位址
下列程式碼範例示範如何在程式碼中指定系結和端點位址,以建立 IRequestChannel 。 建立IOutputChannel的程式碼相同,不同之處在于您必須為ChannelFactory和通道類型指定IOutputChannel介面。
// Create binding -- set binding properties before you open the factory.
SqlAdapterBinding sdbBinding = new SqlAdapterBinding();
// Create address.
EndpointAddress sdbAddress = new EndpointAddress("mssql://<sql_server_name>//<database_name>?");
// Create channel factory from binding and address.
ChannelFactory<IRequestChannel> factory =
new ChannelFactory<IRequestChannel>(sdbBinding, sdbAddress);
// Specify credentials.
factory.Credentials.UserName.UserName = "myuser";
factory.Credentials.UserName.Password = "mypassword";
// Open factory
factory.Open();
// Get channel and open it.
IRequestChannel channel = factory.CreateChannel();
channel.Open();
在組態中指定系結和端點位址
下列程式碼範例示範如何從組態中指定的用戶端端點建立通道處理站。
// Create channel factory from configuration.
ChannelFactory<IRequestChannel> factory =
new ChannelFactory<IRequestChannel>("MyRequestChannel");
// Specify credentials.
factory.Credentials.UserName.UserName = "myuser";
factory.Credentials.UserName.Password = "mypassword";
// Open the factory.
factory.Open();
// Get a channel and open it.
IRequestChannel channel = factory.CreateChannel();
channel.Open();
組態設定
下列程式碼顯示用於上述範例的組態設定。 用戶端端點的合約必須是 「System.ServiceModel.Channels.IRequestChannel」 或 「System.ServiceModel.Channels.IOutputChannel」,視您想要建立的通道圖形類型而定。
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.serviceModel>
<bindings>
<sqlBinding>
<binding name="SqlAdapterBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" maxConnectionPoolSize="100"
encrypt="false" useAmbientTransaction="true" batchSize="20"
polledDataAvailableStatement="" pollingStatement="" pollingIntervalInSeconds="30"
pollWhileDataFound="false" notificationStatement="" notifyOnListenerStart="true"
enableBizTalkCompatibilityMode="true" chunkSize="4194304"
inboundOperationType="Polling" useDatabaseNameInXsdNamespace="false"
allowIdentityInsert="false" enablePerformanceCounters="false"
xmlStoredProcedureRootNodeName="" xmlStoredProcedureRootNodeNamespace="" />
</sqlBinding>
</bindings>
<client>
<endpoint address="mssql://mysqlserver//mydatabase?" binding="sqlBinding"
bindingConfiguration="SqlAdapterBinding" contract="System.ServiceModel.Channels.IRequestChannel"
name="MyRequestChannel" />
</client>
</system.serviceModel>
</configuration>
建立輸入 (服務) 通道
您可以設定 SQL 配接器來輪詢SQL Server資料庫資料表和檢視,方法是在sqlBinding實例上設定系結屬性。 然後,您可以使用此系結來建置通道接聽程式,以便從中取得 IInputChannel 通道,以接收配接器中的 Polling、 TypedPolling或 Notification 作業。
若要建立並開啟 IInputChannel 以接收輸入作業
建立 SQLBinding的實例。
設定輸入作業所需的系結屬性。 例如,針對輪詢作業,您至少必須設定InboundOperationType、PolledDataAvailableStatement和PollingStatement系結屬性,以設定 SQL 配接器來輪詢SQL Server資料庫。
叫用SQLBinding上的BuildChannelListener < IInputChannel >方法來建立通道接聽程式。 您可以將SQL Server連線 URI 指定為此方法的其中一個參數。
開啟接聽程式。
在接聽程式上叫用AcceptChannel方法,以取得IInputChannel通道。
開啟通道。
下列程式碼示範如何建立通道接聽程式,並取得 IInputChannel 以接收配接器中的資料變更訊息。
重要
SQL 配接器僅支援單向接收。 因此,您必須使用IInputChannel從 SQL Server 接收輸入作業的訊息。
// Create a binding: specify the InboundOperationType, the PolledDataAvailableStatement, and
// the PollingStatement binding properties.
SqlAdapterBinding binding = new SqlAdapterBinding();
binding.InboundOperationType = InboundOperation.Polling;
binding.PolledDataAvailableStatement = "SELECT COUNT (*) FROM EMPLOYEE";
binding.PollingStatement = "SELECT * FROM Employee;EXEC MOVE_EMP_DATA;EXEC ADD_EMP_DETAILS John, Tester, 100000";
// Create a binding parameter collection and set the credentials
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = "myuser";
credentials.UserName.Password = "mypassword";
BindingParameterCollection bindingParams = new BindingParameterCollection();
bindingParams.Add(credentials);
// Get a listener from the binding and open it.
Uri connectionUri = new Uri("mssql://mysqlserver//mydatabase?");
IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>(connectionUri, bindingParams);
listener.Open();
// Get a channel from the listener and open it.
IInputChannel channel = listener.AcceptChannel();
channel.Open();