如何使WCF工作可靠

本文关键字:工作 WCF 何使 | 更新日期: 2023-09-27 18:17:47

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

设置我的服务包含3个WCF服务,其中2个是基于HTTP的常规web服务,另一个是使用Protobuf的TCP服务。TCP服务是通过多种方式定制的,以使其尽可能好地与Winform客户端一起工作。

然后在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)。

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

如何使WCF工作可靠

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

确保init代码在serviceHost.Open();之前运行。

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

遗憾的是,业务只接受.Open()被调用后的请求。您将得到EndpointNotFoundException s发生,如果它尚未打开。

同时,服务本身的启动代码——即公共变量()在第一个请求通过之前不会运行。