我有一个托管在 Windows 服务上的 WCF 应用程序。我必须使用 basicHttpBinding。在应用程序中,我对数据进行长期分析,然后将其转化为客户。
是否可以调用 WCF 创建一个将进行分析的线程(该线程的 Id 将发送给客户端)?
客户端应该能够使用传输的 ID 与主题进行通信,并且如果它接收到数据准备就绪的信息,则应该能够下载它。反过来,这将释放线程。
我怎样才能实现这个功能?
好的。有用。客户端方法调用会创建一个线程,即使在支付 guid 之后也会在后台运行并保存操作结果。如何最好地存储这些结果?由于该服务正在运行 Per Call 字典,因此每次调用该服务时都会重置。声明静态数据可以被覆盖,但我认为这不是一个好主意。有任何想法吗?
namespace WCFRiskService
{
[ServiceContract]
public interface IRiskService
{
// return Thread ID
[OperationContract]
int GetAnalysis(AnalysisId);
[OperationContract]
string GetAnalysisData(int ThreadId);
}
public class Analysis
{
public GenerateAnalysis()
{
Thread.Sleep(20000);
Analysis = "Generated Data";
}
}
public class RiskService : IRiskService
{
// How can I change this, to use non-static objects ?
static string AnalysisData = "";
public string GetAnalysisData(int ThreadId);
{
return AnalysisData;
}
public int GetAnalysis(AnalysisId);
{
Analysis AObject = new Analysis();
AObject.Tree = AnalysisTree;
Thread workerThread = new Thread(AObject.GenerateAnalysis);
int managedThreadId = workerThread.ManagedThreadId;
workerThread.Start();
while (!workerThread.IsAlive) ;
return managedThreadId;
}
}
}