【问题标题】:How to make WCF work reliable?如何使 WCF 工作可靠?
【发布时间】:2013-06-10 19:56:57
【问题描述】:

我有一些关于如何使我的 WCF 服务可靠的问题。

设置 我的服务包含 3 个 WCF 服务,2 个是基于 HTTP 的常规 Web 服务,另一个是使用 Protobuf 的 TCP 服务。 TCP 服务以多种方式进行了定制,以使其与 Winform clikent 一起尽可能好地工作。

然后将其托管在 Windows 服务中。

WCF 项目包含一个 CustomHostServiceFactory,其中 ApplyConfiguration 用于加载所有缓存数据(所有服务使用缓存所在的相同 BLL)。

protected override void ApplyConfiguration()
        {
            base.ApplyConfiguration();

            Startup();
        }

Windows 服务在启动时包含以下内容

private ServiceHost StartService(Type serviceType)
        {
            ServiceHost serviceHost = null;

            // Create a ServiceHost for the CalculatorService type and 
            // provide the base address.
            Console.WriteLine("Creating service " + serviceType.FullName);
            serviceHost = new ServiceHost(serviceType);

            serviceHost.Opened += serviceHost_Opened;
            serviceHost.Closed += serviceHost_Closed;

            // Open the ServiceHostBase to create listeners and start 
            // listening for messages.
            Console.WriteLine("Starting service...");
            serviceHost.Open();
            Console.WriteLine("Service started successfully");
            Console.WriteLine("...");
            return serviceHost;

        }

此代码用于 Windows 服务中的 Main(ServiceBase) 和 OnStart(override)。

问题 现在我必须确保这是正确的为什么要设置它?服务可以在启动期间但在缓存的初始化运行之前接收调用吗?

【问题讨论】:

  • 为什么不注册故障事件?

标签: c# wcf hosting


【解决方案1】:

现在我必须确保这是正确的。为什么要设置它?服务可以在启动期间但在缓存的初始化运行之前接收调用吗?

只要确保初始化代码在serviceHost.Open(); 之前运行即可。

如果客户端在端点可用之前调用服务,客户端将收到连接异常。当端点打开时,您可以确定在 Open() 之前调用了初始化代码,并且您的服务已准备好为请求提供服务。

【讨论】:

    【解决方案2】:

    不幸的是,该服务仅在调用.Open() 之后才接受请求。如果尚未打开,您将收到EndpointNotFoundExceptions。

    此外,服务本身的启动代码 - 即公共 ctor() 在第一个请求通过之前不会运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-15
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2023-04-02
      • 2012-12-06
      • 2018-04-23
      相关资源
      最近更新 更多