WCF kullanarak .Net 3.5'te bir istemci/sunucu uygulaması geliştiriyorum. Temel olarak, uzun süredir çalışan bir istemci hizmeti (birkaç makinede), netTcpBinding üzerinden sunucuya çift yönlü bir bağlantı kurar. Daha sonra sunucu, istemcinin asenkronize bir şekilde yanıt verdiğini düşündüğüm belirli isteğe bağlı işlemleri gerçekleştirmek için istemcinin geri çağrı sözleşmesini kullanır (sanırım oldukça standart şeyler). İletişimin çoğunu işlemek için DuplexClientBase sınıfını alt sınıf olarak yapıyorum.Arıza durumunda çift yönlü bir kanalı nasıl otomatik olarak yeniden kurarım?
şey iki ucunda yanlış gittiğinde Maalesef (bir ağ hatası, beklenmedik istisna, vs gibi), kanal/durduruldu hatalı alır ve sonraki tüm işlemler başarısız. İstemci hata yaptığı ve işlemi yeniden denediğinde otomatik olarak açılan bir RecoveringClientBase sınıfı oluşturarak dupleks olmayan kanallarda bu sınırlamayı aştım.
Benim sorum şu ki, bir dubleks kanalın ne zaman arızalandığını belirlemenin yerleşik bir yolu var mı? Bunu sunucuda ya da istemcide nerede kontrol etmeliyim? Başarısız olursak, bağlantının yeniden kurulmasını sağlamak için hangi seçeneklere ihtiyacım var?
Güncelleme: Sunucunun hatalı bir geri arama kanalı kullanmaya çalışabileceği dubleks kanallara özel öneriler arıyorum. Bu nedenle, kanala bir şey olduğunda hemen yeniden bağlanacak/yeniden gönderilecek bir şeye ihtiyacım var. Şu anda kanalın Kapanış etkinliğini dinliyorum ve devlet bir şey Kapalı ise yeniden oluşturuyorum. WCF ekibinden, ...
Belki buna bir örnek verebilir misiniz? Makale sadece fikir önermektedir, ancak uygulama hakkında hiçbir ipucu vermemektedir. – Jacob
+1 Jacob. Bu işin nasıl yapılacağı hakkında herhangi bir bilgisi var mı? Şu anda yeniden bağlanma davranışımı uygulamak için kale dinamik proxy kullanmaya başvurmak zorunda kaldım, ancak bu davranışı Wcf yoluyla eklemeyi tercih ediyorum. Çeşitli Wcf bloglarını okuyorum, ama bu mümkün değil ve nereden başlayacağımı bilemiyorum - basit uzantılar bile sınıf yükleri ve konfigürasyonlar oluşturmayı gerektiriyor gibi görünüyor - bu şaşırtıcı. –
Hizmetinizdeki açık ICommunicationObject arabirimi aracılığıyla Hatalı olaya bir olay işleyici ekleyin. Olay işleyicisinde, Abort() kanalı ve yeni bir kanal oluşturun. – Jakub