Я не нашел нигде ответа.У меня есть функция CLR, которая выполняет вызов веб-метода моего приложения .NET (.asmx).Веб-служба успешно выполняется при прямом вызове, но при вызове через 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 без эффекта:
WebExec svc = new WebExec();<br/>
svc.Timeout = 3600000; // set timeout to 1 hour<br/>
result = svc.ExecuteReport(userID, reportTypeList.ToString(),
deliverToUserList.ToString());
Я хочу получить возвращенный результат, поэтому асинхронное выполнение веб-службы не является решением.Где еще можно переопределить параметры тайм-аута для вызова SQL CLR?Спасибо за любую помощь, вы можете предоставить.
Вот код для функции.Я могу выполнить веб-сервис, тайм-аут происходит только при выполнении через 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, и оба заканчиваются 100-секундным таймаутом.Вот оба звонка, которые я пробовал:
Синхронный:WebExec svc = new WebExec ();svc.Timeout = 3600000;// установить время ожидания на 1 час result = svc.ExecuteReport (userID, reportTypeList.ToString (), deliveryToUserList.ToString ());
Асинхронный:WebExec svc = new WebExec ();IAsyncResult result = svc.BeginExecuteReport (userID, reportTypeList.ToString (), deliveryToUserList.ToString (), null, null);result.AsyncWaitHandle.WaitOne ();retStr = svc.EndExecuteReport (result);