C# 控制台应用中的上下文数据库和 Sharepoint



简而言之: 我有一个 C# 控制台应用程序,用于测试数据并将其从 SQL 写入 SharePoint 列表。

当它作为控制台应用程序运行时,一切正常。我获得了与SQL的连接,创建了上下文,然后连接到SharePoint网站并继续更新某些字段。

现在,当我将工作解决方案部署为 SharePoint 的计时器作业 (.wsp( 时,当我将其更新到服务器场并将其作为功能部署到网站,并将其作为计时器作业运行时,它确实有效,但只能说"一次"。

当我运行该计时器作业时,它会接收 SQL 上下文、连接和更新 SharePoint 列表。但是当我更改 SQL 表中的数据(例如,一个名为"price"的字段从 10.99 更改为 11.99(并再次运行 timerjob 时,它仍然只更新"旧"数据,确切地说,是 10.99 值。

现在,当使用控制台应用程序.exe执行此操作时,在服务器上,无论我执行多少数据库更改,它总是更新最新数据,但作为计时器作业,它似乎"挂起"到以前的上下文连接上,并且仅更新以前的数据。

我是否需要在代码中指定在 timerjob 结束运行后删除上下文,以便它可以在下次运行时调用相同但"新鲜"的上下文。

这是 .wsp 中的初始代码

class TimerJobPromoToolsDefinition : SPJobDefinition
{
public TimerJobPromoToolsDefinition() : base()
{
}
public TimerJobPromoToolsDefinition(string jobName, SPService service) : base(jobName, service, null, SPJobLockType.None)
{
this.Title = "PromoTools_Timer_Job";
}

public TimerJobPromoToolsDefinition(string jobName, SPWebApplication webapp) : base(jobName, webapp, null, SPJobLockType.ContentDatabase)
{
this.Title = "PromoTools_Timer_Job";
}
public override void Execute(Guid targetInstanceId)
{
System.Diagnostics.Trace.Assert(false);
Main();
}
private static TimerJobConnection _context; 
public static void Main()
{
PrintInitializing();
_context = new TimerJobConnection();
string siteURL = "http://somesite.com/";
try
{
using (SPSite site = new SPSite(siteURL))
{
using (SPWeb web = site.OpenWeb())
{
var catalogs = GetArtikliFromPromoTools(web);
var articlesFiltered = GetArtikliFromDB(catalogs);
PrintFinishedLoadingArticles();
GetSharePointCatalogHeaders(web);
UpdateArticles(catalogs, articlesFiltered, web);
PrintEndOfOperation();
Console.WriteLine("Press any key to continue...");
}
}
}
catch (Exception)
{
PrintErrorSharepointConnection();
PrintPressKeyToExit();
}
finally
{
}
}

我认为根据我的经验,"上下文"不应该成为问题。

当您捕获异常时,请尝试检查是否有任何异常,您也可以尝试通过附加到 owstimer 进程来调试代码。

最新更新