0

我有一些关于如何使我的 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)。

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

4

2 回答 2

0

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

只需确保 init 代码在serviceHost.Open();.

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

于 2013-06-10T11:56:57.920 回答
0

不幸的是,该服务仅在调用后才接受请求.Open()EndpointNotFoundException如果它还没有打开,你会发生。

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

于 2013-06-10T11:46:16.897 回答