25 Aug BizTalk WCF SQL Adapter times-out with Composite Operation
Posted at 12:29h
in
News
by Maite DG
Problem
We have the following stored procedure:
CREATE Procedure USP_BTS_InsertStagingA701File
@RecordInfo nvarchar(max),
@ID_BTSOutputFile uniqueidentifier,
@MD_InternalReferenceSector varchar(15)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ID_BTSFileBizTalkStatus INT
SELECT @ID_BTSFileBizTalkStatus = status.ID_BTSFileProcessingStatus
FROM dbo.BTSFileProcessingStatus AS status with (nolock)
WHERE status.Name = ‘Processing’
DECLARE @ID_BTSFileBizTalkInitialStatus INT
SELECT @ID_BTSFileBizTalkInitialStatus = status.ID_BTSFileProcessingStatus
FROM dbo.BTSFileProcessingStatus AS status with (nolock)
WHERE status.Name = ‘Initial’
INSERT INTO [BizTalkStagingDbReference].[dbo].[BTSStagingOutA701MDetailInfo]
([ID_BTSStagingOutA701MDetailInfo]
,[RecordInfo]
,[ID_BTSOutputFile]
,[CreDt]
,[CreUser]
,[ID_BTSFileProcessingStatus]
,[ID_BTSFileReferenceProcessingStatus]
,[ID_BTSFileDmfaProcessingStatus]
,[InternalReferenceSector])
VALUES
(newid()
,@RecordInfo
,@ID_BTSOutputFile
,getdate()
,substring(suser_sname(),charindex(”,suser_sname())+1,12)
,@ID_BTSFileBizTalkStatus
,@ID_BTSFileBizTalkInitialStatus
,@ID_BTSFileBizTalkInitialStatus
,@MD_InternalReferenceSector);
WITH
XMLNAMESPACES(‘http://XXXYYY.BizTalk.RS.Common.Schemas.CompositeWcfSqlRequest’ as ns0,
‘http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo’ as ns1)
SELECT @@ERROR as ‘ns1:ReturnValue’
FOR XML PATH(‘ns1:USP_BTS_InsertStagingA701FileResponse’), ROOT(‘ns0:WcfSqlRequestResponse’)
END
And the corresponding composite operation XML schema in BizTalk:
![](data:image/png;base64,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)
Where the <Any> node is a repeating node (maxOccurs=“unbounded”) corresponding to the following schema:
![](data:image/png;base64,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)
When we send a “WcfSqlRequest”-message with a large number of repeating “USP_BTS_InsertStagingA701File” nodes (> 100) we get the following error:
“The adapter failed to transmit message going to send port “InsertProductSingleFile_WCFSQL” with URL “mssql://.//BTSLOC?”. It will be retransmitted after the retry interval specified for this Send Port. Details:”Microsoft.ServiceModel.Channels.Common.InvalidUriException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached. —> System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.”
Further investigation revealed that the WCF-SQL adapter created 100 connections (the default maximum for the WCF-Custom binding).
Apparently this is a known limitation of the WCF-SQL adapter in combination with composite operations that return a result set:
If there are “n” number of operations in a composite operation that return a result set then “n+1” number of connections are required for the composite operation to be executed. Therefore, you must ensure that the value specified for the MaxConnectionPoolSize binding property is n+1 or greater
Solution
How do we solve this problem?
We could increase the MaxConnectionPoolSize to a large number, but we might not know upfront how many operations there will be in our composite operation.
A more elegant solution would be, instead of returning a result set we could use an output parameter to return our results. In our solution the stored procedure looks like this:
CREATE Procedure USP_BTS_InsertStagingA701File
@RecordInfo nvarchar(max),
@ID_BTSOutputFile uniqueidentifier,
@MD_InternalReferenceSector varchar(15),
@Response xml out
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ID_BTSFileBizTalkStatus INT
SELECT @ID_BTSFileBizTalkStatus = status.ID_BTSFileProcessingStatus
FROM dbo.BTSFileProcessingStatus AS status with (nolock)
WHERE status.Name = ‘Processing’
DECLARE @ID_BTSFileBizTalkInitialStatus INT
SELECT @ID_BTSFileBizTalkInitialStatus = status.ID_BTSFileProcessingStatus
FROM dbo.BTSFileProcessingStatus AS status with (nolock)
WHERE status.Name = ‘Initial’
INSERT INTO [BizTalkStagingDbReference].[dbo].[BTSStagingOutA701MDetailInfo]
([ID_BTSStagingOutA701MDetailInfo]
,[RecordInfo]
,[ID_BTSOutputFile]
,[CreDt]
,[CreUser]
,[ID_BTSFileProcessingStatus]
,[ID_BTSFileReferenceProcessingStatus]
,[ID_BTSFileDmfaProcessingStatus]
,[InternalReferenceSector])
VALUES
(newid()
,@RecordInfo
,@ID_BTSOutputFile
,getdate()
,substring(suser_sname(),charindex(”,suser_sname())+1,12)
,@ID_BTSFileBizTalkStatus
,@ID_BTSFileBizTalkInitialStatus
,@ID_BTSFileBizTalkInitialStatus
,@MD_InternalReferenceSector);
WITH
XMLNAMESPACES(‘http://XXXYYY.BizTalk.RS.Common.Schemas.CompositeWcfSqlRequest’ as ns0,
‘http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo’ as ns1)
SELECT @Response = (SELECT @@ERROR as ‘ns1:ReturnValue’
FOR XML PATH(‘ns1:USP_BTS_InsertStagingA701FileResponse’), ROOT(‘ns0:WcfSqlRequestResponse’))
END
Summary
When you use the WCF-SQL adapter in combination with a composite operation that returns a result set the you should use an OUTPUT parameter to return the result set instead of using a SELECT statement. Otherwise you could risk to run out of connections.
Author: Christophe
No Comments