在我的WebService
中我有一個WebMethod
。此方法包含一個foreach
循環,其中我循環成千上萬條記錄並添加到Sitecore
,然後寫入日誌。Asp.Net中的線程被中止web服務
[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
}
日誌文件打印 「成功」,但一段時間後,拋出一個錯誤
錯誤:
線程已被中止
堆棧跟蹤
系統.Data.SqlClient.SqlParameter.set_SqlDbType(SqlDbType value)
在Sitecore.Data.SqlServer.SqlServerDataApi.CreateParameter(字符串 名稱,對象的值)在 Sitecore.Data.DataProviders.Sql.SqlDataApi.CreateCommand(字符串SQL, 對象[]參數)在 Sitecore.Data.DataProviders。 Sql.SqlDataApi。 <> c__DisplayClass12.b__10()
我已經在Stackoverflow中搜索並得到了這個link。 這裏我必須在服務本身中循環。
我已經通過設置
<httpRuntime targetFramework="4.5.2" executionTimeout="600"/>
他並沒有幫助我嘗試了第二個選項。
是否有解決問題或異常
因此,它是在服務內部錯誤,而不是服務被調用的地方? – Adam
您使用的是數據讀取器還是數據集? – riteshmeher
@riteshmeher我簡化了代碼。這不是來自'datareader'或'dataset',而是'Sitecore'。 –