【问题标题】:Thread in WCF basicHttpBinding [duplicate]WCF basicHttpBinding中的线程[重复]
【发布时间】:2012-11-15 13:28:10
【问题描述】:

可能重复:
WCF Windows Service - Long operations/Callback to calling module

我有一个托管在 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;
        }
    }
}

【问题讨论】:

  • 我不知道该怎么做。我只想使用 basicHttpBinding 的 WCF 应用程序,以从所有服务请求共有的线程中受益,并在必要时终止一个线程。

标签: c# wcf windows-services


【解决方案1】:

您可以为每个作业创建一个作业 ID (Guid) 并将其传递回客户端。然后在服务中,将作业 ID 存储在 ConcurrentDictionary<Guid, AnalysisResult> 上,当客户端询问结果时,您返回与作业 ID 对应的 AnalysisResult。客户端需要检查操作返回的AnalysisResult是否不为空等。

请注意,轮询并不是最好的方法。

如果您可以将basicHttpBinding 替换为wsDualHttpBinding,那么请查看允许两个端点发送消息的duplex services。这样,服务器可以随时向客户端发送消息。您可以为进度报告创建一个回调接口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多