2010-09-03 26 views
7

Net.tcp aktarmayla birlikte bir WCF istemci/hizmetim var. İstemci tarafında WCF izlemeyi açtığımda, izleme sırasında aşağıdaki hataları görüyorum (bkz. Hizmet izleyicisi görüntüleyicisinden ekran görüntüsü). Garip olan şey, WCF'nin bu hatayı ele alması ve kurtarmasıdır ve müşterim herhangi bir istisna almaz ve çalışmaya devam eder. Bu istisna her web metodu çağrısında rastgele fakat rastgele değil. İstemci (windows XP) kimlik doğrulaması penceredir, hizmet SPN tarafından tanımlanır, hizmetler bir NLB'nin (windows server 2003) arkasındaki Windows hizmetlerinde kendiliğinden barındırılır. Burada neler olduğunu herkes bana açıklayabilir mi?Garip WCF net.tcp özel durumu

iz xml den istisna StackTrace geçerli:

<ExceptionString> 
System.ServiceModel.Security.MessageSecurityException: The server rejected the upgrade request. ---&gt; System.ServiceModel.ProtocolException: Error while reading message framing format at position 0 of stream (state: ReadingUpgradeRecord) ---&gt; System.IO.InvalidDataException: More data was expected, but EOF was reached. 
    --- End of inner exception stack trace --- 
    --- End of inner exception stack trace --- 
</ExceptionString> 

Screenshot:

+1

Bir arka plan olarak, bazı kullanıcılarımız bir çok istisna bildiriyorlardı ve neden sadece bazı PC'lerin buna sahip olduğunu araştırıyordum. Bu yüzden kendi bilgisayarımda bir hizmet izlemeye başladım ve bu istisnalar müşteri tarafından alınmadığı için şaşırdım, WCF onları gezdiriyor. Bu MessageSecurityException sonuçta bazı istemci gerçek istisnalar elde etmesine neden oluyor diye düşünüyorum. Bazı istemciler bu özel durumu günlüğe kaydeder: Net.tcp: // myservice: 9501/SomeService. Bağlantı denemesi, 00: 00: 21.3873440 bir zaman dilimi için sürdü. TCP hata kodu 10060: – softveda

+0

NLB'den bahsettin. Yapışkan oturumlar kullanıyor musunuz (oturum yakınlığı)? –

+1

Bağlantı noktası kurallarında NLB oturumu yakınlığı yok. Hizmet, 2 dakika idletimeout ve 1 dak leasetimeout ile özel bir net.tcp bağlaması kullanıyor. Ancak ben yanlışlıkla örnek contcontextmode kullandığımızı buldum çünkü birisi bu varsayılan olduğunu düşündüm. Bunu çok yakında geri alacağım. – softveda

cevap

-3

Emin değilim gerçek bir sorun olabilir ve akış ile ilgili olduğunu if (I inceleyeceğiz) neyi. Yine de, sunucu tarafındaki özel durumu yakalamayı deneyebilir ve bunun yerine CommunicationException'u atabilirsiniz.

catch (Exception ex) 
{ 
    throw new CommunicationException(ex.Message, ex); 
} 

Bu şekilde, istemci proxy'si istisnayı dikkate almamalı ve durumu "Arıza" olmalıdır.

İlgili konular