2011-02-01 15 views
5

Biraz uzun süren WCF tabanlı bir işlem var. WCF servisi, herhangi bir yardımın varsa Azure'da çalışır.WCF Zaman aşımı sorunu?

<wsHttpBinding> 
    <binding name="XXX" closeTimeout="00:05:00" openTimeout="00:05:00" 
    receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" 
    transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
    maxBufferPoolSize="10000000" maxReceivedMessageSize="10000000" 
    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
    allowCookies="false"> 
    <readerQuotas maxDepth="255" maxStringContentLength="8192" maxArrayLength="16384" 
    maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    <reliableSession ordered="true" inactivityTimeout="00:10:00" 
    enabled="false" /> 
    <security mode="TransportWithMessageCredential"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
    <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="false"/> 
    </security> 
    </binding> 
</wsHttpBinding> 

2) WCF hizmeti web.config'de aşağıdaki bağlama bölümü vardır:

1) Win istemcisi bağlama bölümünde aşağıdaki .config ayarı vardır: İnanıyorum sorunu zaman aşımları ile ilgisi var

<wsHttpBinding> 
    <binding name="XXX" maxReceivedMessageSize="10000000" sendTimeout="00:10:00" receiveTimeout="00:10:00" closeTimeout="00:10:00" openTimeout="00:10:00"> 
    <security mode="TransportWithMessageCredential"> 
     <message clientCredentialType="UserName" establishSecurityContext="false" /> 
    </security> 
    <readerQuotas maxArrayLength="2000000" maxBytesPerRead="10000000" maxStringContentLength="10000000" maxDepth="255" /> 
    </binding> 

    </wsHttpBinding> 

3) WCF'de (genellikle 2 dakika) bir uzun süredir çalışan yöntemim var. Müşteriler yöntemi çağırırlar ve 1 dakikadan daha uzun bir süre boyunca çalıştırılanlar istisna ile dışarı atılır. Bu en iç istisnadır:

<InnerException> 
    <Type>System.Net.Sockets.SocketException</Type> 
    <Message>An existing connection was forcibly closed by the remote host</Message> 
    <StackTrace> 
     <Frame>at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)</Frame> 
    </StackTrace> 
    </InnerException> 
</InnerException> 

4) WCF başarıyla tamamlandı kendisini çağırır, ancak (Ben Başlangıç ​​/ Bitiş ikisi) sunucu tarafında açmış. İstisnadan nasıl kurtulurum?

Teşekkür ederiz! Windows Azure yük dengeleyici, 60 saniye sonra boştaki bağlantıları sonlandırır.

+0

Herzaman, bu hatasını veriyor. Hata, bir dakika sonra kesin olarak müşteriye iade edilir. Sunucu yine de yöntem çağrısını bitiriyor. – Igorek

cevap

8

+1

Steve, vay, kesinlikle bilmiyordum ... zaman aşımını uzatmak için var mı? Bazı aramalar 1 dakika sonra tamamlanabilir! – Igorek

+0

İlginç. Steve, bu davranışı değiştirmenin herhangi bir yolu var mı, yoksa uzun süredir devam eden işlerin, bir kuyruk veya başka bir çapraz görev yöntemi ile çalışan bir rol için yetiştirilmesinin amacı nedir? –

+0

Bunu değiştirmek için şu anda bir yolu yok. Ancak, periyodik olarak TCP bağlantısı üzerinden veri gönderebilirseniz, açık kalacaktır. (Sadece sonlandırılan _idle_ bağlantıları var.) – smarx