Sql CLR webservice调用在100秒时超时

Sql CLR webservice调用在100秒时超时,sql,timeout,clr,webrequest,Sql,Timeout,Clr,Webrequest,我在任何地方都没有找到答案。我有一个CLR函数,它执行.NET应用程序(.asmx)的webmethod调用。web服务在直接调用时成功执行,但在通过CLR调用时,它会在100秒后超时,并出现以下错误: Msg 6522, Level 16, State 1, Line 1 A .NET Framework error occurred during execution of user-defined routine or aggregate "fn_ExecuteReport": System

我在任何地方都没有找到答案。我有一个CLR函数,它执行.NET应用程序(.asmx)的webmethod调用。web服务在直接调用时成功执行,但在通过CLR调用时,它会在100秒后超时,并出现以下错误:

Msg 6522, Level 16, State 1, Line 1
A .NET Framework error occurred during execution of user-defined routine or aggregate "fn_ExecuteReport":
System.Net.WebException: The operation has timed out
System.Net.WebException:
   at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at DD.WebServices.WebExec.ExecuteReport(String ddBotID, String serverKey, Int32 ddUserID, String reportReportTypeList, String deliverToUserList)
   at ExecuteReport.GetResult(Int32 userID, SqlString reportList, SqlString deliverToUserList)
我在fn_ExecuteReport中增加了web服务代理超时,但没有效果:

WebExec svc = new WebExec();<br/>
svc.Timeout = 3600000;  // set timeout to 1 hour<br/>
result = svc.ExecuteReport(userID, reportTypeList.ToString(),
                           deliverToUserList.ToString());
我在CLR函数中尝试了对web服务的同步和异步调用,结果都出现了100秒的超时。以下是我试过的两个电话:

同步:
WebExec svc=新的WebExec(); svc.Timeout=3600000;//将超时设置为1小时 结果=svc.executeport(userID,reportTypeList.ToString(),deliverToUserList.ToString())

异步:
WebExec svc=新的WebExec()
IAsyncResult result=svc.BeginExecuteReport(用户ID,reportTypeList.ToString(),deliverToUserList.ToString(),null,null)
result.AsyncWaitHandle.WaitOne()

retStr=svc.EndExecuteReport(结果)

您的错误消息表明超时源自SQL Server

您是否尝试过更新SQL Server统计信息(或重建索引)


您能发布CLR函数的代码吗?

谢谢您的回复。这是函数的代码…不太重要。同样,我能够执行webservice,只有通过CLR执行时才会发生超时。ALTER函数[dbo]。[fn_ExecuteReport](@UserID[int],@ReportTypeList[nvarchar](max),@DeliverToUserList[nvarchar](max))返回[nvarchar](255),并以调用方身份执行外部名称[MyCLRLib]。[ExecuteReport]。[GetResult]这只是函数的存根。发布代码怎么样?我添加了上面函数的核心。我尝试了使web服务调用同时同步和异步,但没有成功。感谢您的关注。“我添加了上面函数的核心”-在哪里?上面标记为“同步”和“异步”的两部分是存根调用的“ExecuteReport”c#类的核心。第一个是同步调用,因此我尝试将其更改为异步调用,但CLR在100秒后仍然超时,因此超时的不是这段代码。CLR函数必须执行一个WebRequest来检索webservice数据,而这个WebRequest似乎超时了。我不确定该检索代码是如何/在何处生成的。出于几个原因(其中之一是超时问题),我决定构建一个小型控制台应用程序来执行web服务,而不是使用SQL CLR。我仍然想知道如何通过SQLCLR调用长时间运行的web服务调用,所以我会为任何能告诉我的人买一杯啤酒。
ALTER FUNCTION [dbo].[fn_ExecuteReport]
(@UserID int, @ReportTypeList nvarchar(max), @DeliverToUserList nvarchar(max)) 
RETURNS [nvarchar](255) 
WITH EXECUTE AS CALLER AS EXTERNAL NAME [MyCLRLib].[ExecuteReport].[GetResult]