gpt4 book ai didi

c# - 线程在 Asp.Net 中被中止 Web 服务

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:06 25 4
gpt4 key购买 nike

在我的 WebService 中,我有一个 WebMethod。此方法包含一个 foreach 循环,我在其中循环数千条记录并添加到 Sitecore,然后写入日志。

[WebMethod(EnableSession = true)]
public int Copy()
{
foreach (Item item in subItems) //subitems are around 1L
{
CopyLanguage();
}
}

复制数据的代码(此方法捕获的异常)

   private void CopyLanguage()
{
string message = "success";
using (new SecurityDisabler())
{
try
{
//Copying Data
}
catch (Exception ex)
{
message = ex.Message;
}
finally
{
Log(message);
}
}
}

复制数据

void Copy(Sitecore.Data.Items.Item item, Sitecore.Globalization.Language sourceLanguage,
Sitecore.Globalization.Language targetLanguage)
{
//get a reference to the master DB
Sitecore.Data.Database masterDB = Sitecore.Configuration.Factory.GetDatabase("master");

Sitecore.Data.Items.Item targetItem = masterDB.Items[item.ID, targetLanguage];
Sitecore.Data.Items.Item sourceItem = masterDB.Items[item.ID, sourceLanguage];

if (targetItem == null || sourceItem == null || sourceItem.Versions.Count == 0)
return;
//Disable the security context
using (new Sitecore.SecurityModel.SecurityDisabler())
{
try
{
if (targetItem.Versions.Count == 0)
{
//add a version if none exist
targetItem = targetItem.Versions.AddVersion();
}
//edit item in target language
targetItem.Editing.BeginEdit();
sourceItem.Fields.ReadAll();
//copy over all fields from source to target language
//we omit internal fields which start with __
foreach (Sitecore.Data.Fields.Field field in sourceItem.Fields)
{
if (!field.Shared && !field.Name.StartsWith("__") && field.Name.Trim() != "")
{
targetItem.Fields[field.Name].SetValue(field.Value, true);
}
}

targetItem.Editing.EndEdit();
targetItem.Editing.AcceptChanges();
}
catch (Exception ex)
{
targetItem.Editing.CancelEdit();
}
}

写入日志文件文件

private void Log(string message)
{
// Writing Log to text file
}

日志文件正在打印“成功”,但过了一会儿抛出错误

错误:

Thread was being aborted

堆栈跟踪

System.Data.SqlClient.SqlParameter.set_SqlDbType(SqlDbType value)
at Sitecore.Data.SqlServer.SqlServerDataApi.CreateParameter(String name, Object value) at Sitecore.Data.DataProviders.Sql.SqlDataApi.CreateCommand(String sql, Object[] parameters) at Sitecore.Data.DataProviders.Sql.SqlDataApi.<>c__DisplayClass12.b__10()

我在 Stackoverflow 中搜索并得到了这个 link .在这里,我必须在服务本身中循环。

我已经通过设置尝试了第二个选项

<httpRuntime targetFramework="4.5.2" executionTimeout="600"/>

他没有帮助我。

有没有办法解决问题或者异常后继续循环

最佳答案

ThreadAbortException 是一种特殊异常,除非您调用 Thread.ResetAbort(),否则它会在每个 catch block 结束时自动重新抛出。尝试在 catch block 中调用 Thread.ResetAbort()

关于c# - 线程在 Asp.Net 中被中止 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37944087/

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