【问题标题】:How can I run a WCF service constructor once for all clients when it's InstanceContextMode is set to PerSession?当 InstanceContextMode 设置为 PerSession 时,如何为所有客户端运行一次 WCF 服务构造函数?
【发布时间】:2012-03-30 06:08:58
【问题描述】:

ServiceBehaviorAttribute.InstanceContextMode 设置为PerSession 时,如何在 WCF 服务的构造函数中只运行一次代码?

[ServiceBehavior(
    InstanceContextMode = InstanceContextMode.PerSession, 
    ConcurrencyMode = ConcurrencyMode.Single)]
public class SomeService : ISomeService
{
    public SomeService()
    {
        this.RunThisOnceForAllClients();
    }

    private void RunThisOnceForAllClients() { }
}

或者,如何让一个方法在 WCF 服务运行后自动运行,但它对于所有客户端调用只会运行一次

请帮忙。提前致谢。


我使用Managed Windows Service 部署我的 WCF 服务。我的代码在 C# 中。框架在 .NET 4 中。项目在 Visual Stuido 2010 Professional 中构建。该服务由 Windows 窗体应用程序使用。 如果你想知道为什么我需要这样做,我需要执行一个 Uploader 方法,该方法会将服务的数据库上传到另一个服务,但它会是在特定时间执行,所以我把它放在另一个线程中,只要服务正在运行,它就会一直运行。

【问题讨论】:

    标签: c# wcf service .net-4.0


    【解决方案1】:

    为什么不在 Windows 服务中托管 WCF 服务之前运行此操作,以便在 WCF 服务上线后立即准备好它。您可以从正在运行的线程获取它已完成的事件,然后部署 WCF 服务。

    【讨论】:

      【解决方案2】:

      您需要编写服务行为或端点行为。在这种行为中,首先从客户端调用该函数并将变量设置为 true 并将其存储在某个永久内存或文件位置。 你可以看看下面的msdn article about Extending WCF

      【讨论】:

        【解决方案3】:

        使用静态构造函数?当(之前)在您的代码中对该类执行任何操作时,它将被调用一次。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多