2011-07-06 18 views
21

Genellikle, bir WCF uç noktası kullanılamıyorsa (genellikle servis sağlayıcım çalışmıyorsa), zaman aşımından sonra bir EndpointNotFoundException alacağım. Normal zaman aşımına güvenmek zorunda kalmadan kullanılabilir olup olmadığını görmek için hizmeti sorgulamanın hızlı bir yolunu kullanmak isterim. Diğer bir deyişle, normal şartlar için normal bir zaman aşımı yapmak istiyorum, ancak uç noktadaki hızlı bir "ping" için, hemen mevcut değilse, hızlı bir şekilde başarısız olmasını istiyorum.WCF bitiş noktasının dinlenip dinlenmediğini kontrol etmenin en hızlı yolu

Bu nasıl başarılabilir?

cevap

8

Bir TimeOut istisnası için beklemek zorunda kalacaksınız. Proxy nesnesini oluştururken TimeOut'u (geçersiz kılma) ayarlayabilirsiniz. Ucuzlar, bu yüzden Ping için geçici bir proxy yapın.

Sunucu tarafında, (GetVersion gibi) aramak için hafif bir işlev olduğundan emin olabilirsiniz.

+3

WCF'yi kullanırken, sadece bir "void Ping()" kullandım; p –

4

durumunu kontrol etmek için, (onun vb.net 2.0 kod çok WCF çalışması gerekir)

Dim sckTemp As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 
    sckTemp.ReceiveTimeout = 500 : sckTemp.SendTimeout = 500 

    Try 
     '' Connect using a timeout (1/2 second) 
     Dim result As IAsyncResult = sckTemp.BeginConnect("Host_ADDRESS", YOUR_SERVER_PORT_HERE, Nothing, Nothing) 
     Dim success As Boolean = result.AsyncWaitHandle.WaitOne(500, True) 
     If (Not success) Then 
      sckTemp.Close() : Return False 
     Else 
      Return True 
     End If 
    Catch ex As Exception 
     Return False 
    End Try 

O 1/2 size Sunucu durumunu verecektir böyle Soket Bağlantısı aracılığıyla ev sahipliği bağlanmayı deneyebilirsiniz ikinci

+0

Umut verici görünüyor. Adil olmak gerekirse, tam yapılandırmamdan bahsetmedim, ancak bağlantı noktası paylaşımını kullanıyorum. Burada başka bir yaklaşıma sahip olmak güzel. – Larsenal

+0

Eşzamanlı erişim gerçekleştiğinde sorunlarla karşılaşacaksınız, görmek için ForAll Paralel yönteminde bir sınama gerçekleştirin – Alexandre

2

Değiştirmek istediğiniz SendTimeout var. Benim durumumda, her zaman tesadüfen Cuma gecesi gibi görünen bir FedEx paket derecelendirme hizmeti. Büyük olasılıkla yanlış negatiflerin (yani hizmetin kapalı olması) ne kadar önemli olduğuna bağlı olarak zaman aşımı değerini dikkatle düşünmeniz gerekecektir.

rateService.Endpoint.Binding.SendTimeout = TimeSpan.FromSeconds(.5); 

Bu değer yalnızca WCF istemcisini etkileyecek ve bu hizmetin zaman aşımını kalıcı olarak değiştirmeyecektir.

İlgili konular