gpt4 book ai didi

c# - WebService调用异常: Thread was being aborted

转载 作者:太空狗 更新时间:2023-10-30 00:43:52 25 4
gpt4 key购买 nike

最近,我们从每晚将数据发布到支付服务器的 ASP.NET 网络服务中获取了 System.Threading.ThreadAbortExceptions。

Web 服务是从另一个客户端调用的标准 .asmx 页面。

在页面内,我有一个 foreach 循环,它遍历数据库中的许多付款行:

foreach (var obtRow in readyToBeCaptured)
{
try
{
status = dibs.GetPagePost(...);
// handle status here
}
catch (ThreadAbortException tex)
{
SingletonLogger.Instance.Error(string.Format("Transactionhandler - Could not Capture, Thread was aborted. {0}", tex.Message), tex);
}
catch (Exception ex)
{
SingletonLogger.Instance.Error(string.Format("Transactionhandler - Could not Capture, statuscode: {0}, message: {1}.", status, ex.Message), ex);
}
}

奇怪的是,当发生此错误时,我从 catch(ThreadAbortException tex) block 中获取了一个日志条目,但随后代码中断并被捕获到调用树更上层的另一个 try catch block 中。理想情况下,我会让 foreach 循环中的代码继续

这是 GetPagePost 方法

private bool GetPagePost(string url, NameValueCollection nameValueCollection, string userName, string password)
{
WebClient client = new WebClient();
if (userName != "")
{
client.Credentials = new NetworkCredential(userName, password);
}
foreach (string str in nameValueCollection.AllKeys)
{
this._callCollection.Add(str, nameValueCollection[str]);
}
StringBuilder builder = new StringBuilder();
builder.Append("DIBS.NET/1.2.0 ( ");
builder.Append("OS ").Append(Environment.OSVersion.Platform).Append(" ").Append(Environment.OSVersion.Version).Append("; ");
builder.Append(".NET CLR ").Append(Environment.Version).Append("; ");
builder.Append("User ").Append(Environment.UserName).Append("; ");
builder.Append("Domain ").Append(Environment.UserDomainName).Append("; ");
builder.Append(" ) ");
client.Headers.Add("User-Agent", builder.ToString());
try
{
byte[] bytes = client.UploadValues(url, "POST", nameValueCollection);
this._httpStatus = 200;
this._httpBody = Encoding.UTF8.GetString(bytes);
return true;
}
catch (WebException exception)
{
this._httpBody = exception.Message;
this._httpStatus = (int) exception.Status;
}
catch (UriFormatException exception2)
{
this._httpBody = exception2.Message;
this._httpStatus = -9999;
}
catch (Exception exception3)
{
this._httpBody = exception3.Message;
this._httpStatus = -99999;
}
return false;
}}

为什么会出现此错误?如何防止代码跳出 foreach 循环?我一直在查看 StackOverflow 上的其他一些帖子,但它们似乎与我不使用的 Reponse.Redirect 的用法有关。

谢谢

/延斯

最佳答案

我也有类似的问题。我认为 IIS 正在终止您的线程,因为它花费的时间太长。根据您的描述“我有一个 foreach 循环遍历数据库中的许多付款行”,您可以重组您的应用程序以单独处理每一行。创建一个 web 方法将行发送到客户端,然后让客户端一次迭代一个事务并在不同的 web 方法中处理它们。然后您可以处理发生的异常并继续进行。您甚至可以使用 Parallel.ForEach 一次处理多个

关于c# - WebService调用异常: Thread was being aborted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9412866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com