我有一个通过WCF连接到Windows服务并调用方法的Web应用程序。在该方法返回其结果后(并且所有内容都成功 - 请参见下面的行**)我希望该服务继续并执行其他工作。
最简单的方法是什么?
感谢 达莫
C#代码
//Add Files To Control Manager
public ReturnClass FilesToControl(List<Item> lstNewItems,string ReferenceNumber,string Type,String Description)
{
try
{
String ThisisAnItemToControl = "";
String ThisIsItsType = "";
for (int i = 0; i < lstNewItems.Count; i++) // Loop through List with for
{
ThisisAnItemToControl = lstNewItems[i].Paramater;
ThisIsItsType = lstNewItems[i].Type;
// Do a pre check on the item
// Does File Exist
if (!File.Exists(ThisisAnItemToControl))
return new ReturnClass(-1, ThisisAnItemToControl + " does not exist", String.Empty, null, null, null);
}
return new ReturnClass(1, "", String.Empty, null, null, null);
// Now that we have returned a result to the web application we can get to work and modify the items under control but how can i do this?
// **??
}
catch (Exception ex)
{
return new ReturnClass(-1, ex.Message.ToString(), "", null, null, null);
}
答案 0 :(得分:3)
我要做的是将额外的工作放在另一个功能中。然后,在从WCF函数返回之前,为额外的工作函数创建一个新线程并运行它。
答案 1 :(得分:2)
您可以按照建议创建新线程,但如果您正在进行的工作将长时间运行,那么您很可能会从ASP.NET线程池中获取线程。这可能会导致应用程序的吞吐量降低。
所以,我可能会有另一个进程,也许是一个Windows服务,你的WCF应用程序可以调用它来执行更多的工作。这将使处理面向前方的请求与后台工作的问题脱钩。
答案 2 :(得分:1)
在另一个线程中执行工作或在服务器端引发事件,由另一个类/方法捕获。
答案 3 :(得分:1)
Task.Factory.StartNew(() => DoWork());
但是您可能遇到的一个问题是您关闭了线程,然后IIS会终止您的WCF服务。这当然是假设您在ISS中运行它。