2011-04-08 35 views
0

我還沒有發現這種回答的任何地方。我有一個CLR函數來執行.NET應用程序(.asmx)的web方法調用。 Web服務時直接調用,但成功執行時通過CLR它始終與下面的錯誤稱爲在100個秒後:CLR Web服務調用超時規定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()); 

我想捕捉返回的結果,以便執行異步Web服務是不是一個解決方案。我可以在哪裏重寫SQL CLR調用的超時設置?感謝您的任何幫助,您可以提供。

下面是該函數的代碼。我能夠執行webservice,超時只發生在通過CLR執行時。

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] 

我已經嘗試了對CLR函數中的Web服務的同步和異步調用,並且都以100秒超時結束。這是我嘗試過的兩個調用:

Synchronous:
WebExec svc = new WebExec(); svc.Timeout = 3600000; //設置超時到1個小時 結果= svc.ExecuteReport(用戶ID,reportTypeList.ToString(),deliverToUserList.ToString());

異步:
WebExec svc = new WebExec();
IAsyncResult的結果= svc.BeginExecuteReport(用戶ID,reportTypeList.ToString(),deliverToUserList.ToString(),NULL,NULL);
result.AsyncWaitHandle.WaitOne();
retStr = svc.EndExecuteReport(result);

+0

,這只是該函數的存根。如何張貼代碼... – 2011-04-10 00:57:19

+0

我加了上面的功能的膽量。我試着讓Web服務調用同步和異步沒有成功。謝謝你看看。 – 2011-04-10 02:18:33

+0

「我在上面添加了功能的內涵」 - 在哪裏? – 2011-04-10 02:19:30

回答

0

你的錯誤信息提示,超時被起源於SQL Server中。

您是否嘗試過更新您的SQL Server統計(或重建索引)?

你可以發佈您的CLR函數的代碼?

+0

感謝您的回覆。這裏是函數的代碼...並不是很重要。再次,我能夠執行web服務,超時只發生在通過CLR執行時。 ALTER FUNCTION [dbo]。返回[nvarchar](255)WITH EXECUTE AS CALLER ASEXTERNAL NAME [MyCLRLib]。[ExecuteReport] [調用getResult] – 2011-04-09 15:07:19