WCF服务可用性

本文关键字:可用性 服务 WCF | 更新日期: 2023-09-27 18:21:05

我已经创建了WCF服务器和客户端应用程序。在服务器端,我需要知道应用程序何时运行。

我已经创建了一个WCF方法,并尝试这样调用它:

var myEndpoint = new EndpointAddress(url); //I generate HTTP url to endpoint here
var myBinding = new WSHttpBinding { Security = { Mode = SecurityMode.None } };
var myChannelFactory = new ChannelFactory<IMycontract>(myBinding, myEndpoint);
ISqlExpressSyncContract client = null;
try
{
    client = myChannelFactory.CreateChannel();
    client.IsAvailable();
    ((ICommunicationObject)client).Close();
    return true;
}
catch (Exception)
{
    if (client != null)
    {
        ((ICommunicationObject)client).Abort();
    }
    return false;
}

代码可以工作,但当它不可用时超时时间太长。我尝试使用UDP发现,如这里提供的http://msdn.microsoft.com/en-us/magazine/ee335779.aspx.但当客户端不可用时,它也会遇到同样的问题。

实现逻辑以快速ping每个客户端并检查其可用性状态的最佳方法是什么?

WCF服务可用性

尝试降低超时值,如下所示:

myBinding.OpenTimeout = TimeSpan.FromSeconds(5);

此超时值用于打开通信通道。如果需要,还可以在绑定对象上调整SendTimeoutReceiveTimeoutCloseTimeout

我在"System.ServiceProcess"命名空间中使用ServiceController类,它运行得很好。

try
{
    ServiceController sc = new ServiceController("Service Name", "Computer IP Address");
    Console.WriteLine("The service status is currently set to {0}",
        sc.Status.ToString());
    if ((sc.Status.Equals(ServiceControllerStatus.Stopped)) ||
        (sc.Status.Equals(ServiceControllerStatus.StopPending)))
    {
        Console.WriteLine("Service is Stopped, Ending the application...");
        Console.Read();
        EndApplication();
    }
    else
    {
        Console.WriteLine("Service is Started...");
    }
}
catch (Exception)
{
    Console.WriteLine("Error Occurred trying to access the Server service...");
    Console.Read();
    EndApplication();
}