2012-01-23 2 views
1

Я создал серверные и клиентские приложения WCF. На стороне сервера мне нужно знать, когда приложение запущено.Доступность службы 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. Но у него такая же проблема, когда клиент недоступен.

Какой лучший способ реализовать логику для быстрого пинга каждого клиента и проверить их статус доступности?

ответ

3

Попробуйте уменьшить значение тайм-аута следующим образом:

myBinding.OpenTimeout = TimeSpan.FromSeconds(5); 

Это значение тайм-аута для открытия канала связи. При необходимости вы также можете настроить SendTimeout, ReceiveTimeout и CloseTimeout, все они также на объекте привязки.

0

Я использую класс ServiceController в пространстве имен System.ServiceProcess и прекрасно работает.

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(); 
} 
Смежные вопросы