服务器端WCF(.svc)服务在异常后停止工作

服务器端WCF(.svc)服务在异常后停止工作

问题描述:

我在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://*.com/questions/5623456/getting-an-unhandled-exception-in-vs2010-debugger-even-though-the-exception-is-ha) – LamonteCristo 2011-05-31 00:49:08

我不能重现此问题了(服务器只停止响应)。我觉得这里解释的问题是关系到VS2010的愿望捕捉处理的异常,并停止所有线程:

Getting an Unhandled Exception in VS2010 debugger even though the exception IS handled