2011-05-30 216 views
2

我在WCF中使用雙工ReliableSecureProfile,如果任何客戶端發生異常,服務器將停止監聽新請求。服務器端WCF(.svc)服務在異常後停止工作

如何讓服務器對任何單個客戶端發生的故障具有更強的恢復能力?一切再次工作,如果我重新啓動服務器或重新部署

我的客戶端代碼如下所示:

  CustomBinding rspBinding = new CustomBinding(); 
      rspBinding.Elements.Add(new ReliableSessionBindingElement()); 
      rspBinding.Elements.Add(new MakeConnectionBindingElement()); 
      rspBinding.Elements.Add(new TextMessageEncodingBindingElement()); 
      rspBinding.Elements.Add(new HttpTransportBindingElement()); 

      DuplexChannelFactory<IProcessDataDuplex> channelFactory = 
       new DuplexChannelFactory<IProcessDataDuplex> 
        (new CallbackHandler(), rspBinding, serviceAddress); 

      // 
      // The problem always occurs on this line. 
      // 
      reusableSW = new LC.Utils.WCF.ServiceWrapper<IProcessDataDuplex>(channelFactory); 

我的web.config文件看起來是這樣的:

<system.serviceModel> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name="rspServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <useRequestHeadersForMetadataAddress> 
      <defaultPorts> 
       <add scheme="http" port="80" /> 
       <add scheme="https" port="443" /> 
      </defaultPorts> 
      </useRequestHeadersForMetadataAddress> 
     </behavior> 
     </serviceBehaviors> 



    </behaviors> 
    <bindings> 
     <customBinding> 
     <!-- Reliable Secure Profile --> 
     <binding name="rspBinding"> 
      <reliableSession /> 
      <MakeConnectionBindingElement/> 
      <textMessageEncoding /> 
      <httpTransport /> 
     </binding> 
     </customBinding> 

     <netTcpBinding> 
     <binding portSharingEnabled="true" > 
      <security mode="None" /> 
     </binding> 
     </netTcpBinding> 

    </bindings> 

    <extensions> 
     <bindingElementExtensions> 

     <!-- Reliable Secure Profile --> 
     <add name="MakeConnectionBindingElement" type="Microsoft.Samples.ReliableSecureProfile.MakeConnectionElement, Microsoft.Samples.ReliableSecureProfile.MakeConnectionChannel" /> 

     </bindingElementExtensions> 
    </extensions> 

    <services> 


     <!-- Reliable Secure Profile --> 
     <service behaviorConfiguration="rspServiceBehavior" name="Microsoft.Samples.ReliableSecureProfile.RSPService"> 
     <endpoint binding="customBinding" bindingConfiguration="rspBinding" 
      contract="Microsoft.Samples.ReliableSecureProfile.IProcessDataDuplex" 
      listenUriMode="Explicit"> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" 
      contract="IMetadataExchange" /> 
     <host> 
     </host> 
     </service> 

     <!--<service name="WcfTcpTest.Service1" > 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost:1337/Service1/" /> 
      </baseAddresses> 
     </host> 
     <endpoint address="" binding="netTcpBinding" contract="WcfTcpTest.IService1"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/> 
     </service>--> 

    </services> 
    <protocolMapping> 
     <clear/> 
     <!-- removes all defaults which you may or may not want. --> 
     <!-- If not, use <remove scheme="http" /> --> 
     <add scheme="http" binding="customBinding" bindingConfiguration="rspBinding"/> 
    </protocolMapping> 
    <serviceHostingEnvironment 
     aspNetCompatibilityEnabled="false" 

     multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
+0

什麼是你的客戶做的異常後的通道已經被拋出?它是否正確清理? – razlebe 2011-05-31 00:38:51

+0

@razlebe - 不,它沒有正確清理。我試圖說服那個服務器端。這是一個被濫用的公共服務 – LamonteCristo 2011-05-31 00:45:17

+0

相關:我試圖調試我的服務,並且正在VS2010上掛上SP1的怪異行爲:[VS2010調試器中的未處理的異常,即使異常實際上被捕獲]( http://stackoverflow.com/questions/5623456/getting-an-unhandled-exception-in-vs2010-debugger-even-though-the-exception-is-ha) – LamonteCristo 2011-05-31 00:49:08

回答