。。。。如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效。若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时。

错误信息1.

“/”应用程序中的服务器错误。


无法处理消息。这很可能是因为操作“http://tempuri.org/IInSideContract_WebSite/WebGetWebSiteConfigUrl”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配。如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效。若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ServiceModel.FaultException: 无法处理消息。这很可能是因为操作“http://tempuri.org/IInSideContract_WebSite/WebGetWebSiteConfigUrl”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配。如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效。若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时。

源错误:

执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。


堆栈跟踪:

[FaultException: 无法处理消息。这很可能是因为操作“http://tempuri.org/IInSideContract_WebSite/WebGetWebSiteConfigUrl”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配。如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效。若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时。]

[MessageSecurityException: 从另一方收到未进行安全处理或安全处理不正确的错误。有关错误代码和详细信息,请参见内部 FaultException。]
   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +4729427
   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +1725
   CloudTraPlatNet.InSideService_WebSite.IInSideContract_WebSite.WebGetWebSiteConfigUrl() +0
   CloudTraPlatNet.Interface.Base.BaseData.WebGetWebSiteConfigUrl() +107
   CloudTraPlatNet.Controllers.HomeController.Index() +294
   lambda_method(Closure , ControllerBase , Object[] ) +79
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +264
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +129
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +818202
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +314
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +818320
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375

错误消息2.

如果出现错误消息1之后再继续访问,则出现错误消息2.

 

“/”应用程序中的服务器错误。

 


 

通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ServiceModel.CommunicationObjectFaultedException: 通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。

源错误:

执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。


堆栈跟踪:

[CommunicationObjectFaultedException: 通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。]
   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +4729427
   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +1725
   CloudTraPlatNet.InSideService_WebSite.IInSideContract_WebSite.WebGetWebSiteConfigUrl() +0
   CloudTraPlatNet.Interface.Base.BaseData.WebGetWebSiteConfigUrl() +107
   CloudTraPlatNet.Controllers.HomeController.Index() +294
   lambda_method(Closure , ControllerBase , Object[] ) +79
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +264
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +129
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +818202
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +314
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +818320
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375

 


版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.272 

背景:

服务绑定:wsHttpBinding;使用了X509

 

<wsHttpBinding>
        <binding name="wsBinding"  closeTimeout="00:10:00" openTimeout="00:10:00"
                 receiveTimeout="01:00:00" sendTimeout="01:00:00" allowCookies="false"
                 bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                 maxBufferPoolSize="999999999" maxReceivedMessageSize="999999999"
                 messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="false">
          <readerQuotas maxDepth="32" maxStringContentLength="999999999" maxArrayLength="999999999"
                        maxBytesPerRead="999999999" maxNameTableCharCount="999999999" />
          <reliableSession inactivityTimeout="01:00:00"/>
          <security mode="Message">
            <!--定义消息级安全性要求的类型,为证书-->
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
<behavior name="httpBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceCredentials>
            <serviceCertificate findValue="JRNETSERVICE" x509FindType="FindBySubjectName" storeLocation="LocalMachine"
                                storeName="My" />
            <clientCertificate>
              <!--自定义对客户端进行证书认证方式 这里为 None-->
              <authentication certificateValidationMode="Custom"
                             customCertificateValidatorType="CloudTraPlat.Tool.SafetyVerification.X509Validator,CloudTraPlat.Tool"/>
            </clientCertificate>
          </serviceCredentials>
          <serviceAuthorization serviceAuthorizationManagerType="CloudTraPlat.Tool.SafetyVerification.CustomServiceAuthorizationManager,CloudTraPlat.Tool">
            <authorizationPolicies>
              <add policyType="CloudTraPlat.Tool.SafetyVerification.CustomAuthorizationPolicy,CloudTraPlat.Tool"/>
            </authorizationPolicies>
          </serviceAuthorization>
        </behavior>

 

 

 

出现以上问题主要是因为WCF客户端在调用WCF服务时,使用了Static。

原因:使用Static,连接时会再加载类库的时候实例化,通道长时间闲置或服务重启都会造成通道出错。

解决办法:

1.在调用WCF时不使用Static

2.对于一个大项目在调用WCF时不使用Static几乎是不可能的,所以只能改变Static方法中调用WCF的方式如下(关键部分代码):

 

 1 public partial class WebForm2 : System.Web.UI.Page
 2     {
 3         protected void Page_Load(object sender, EventArgs e)
 4         {
 5 
 6         }
 7         
 8         protected void btnOK_Click(object sender, EventArgs e)
 9         {
10             if (String.IsNullOrWhiteSpace(this.txtText.Text.Trim()) || String.IsNullOrEmpty(this.txtText.Text.Trim()))
11             {
12                 Response.Write("亲,把这个框框填了吧");
13                 return;
14             }
15             try
16             {
17                 lblMsg.Text = TEST(txtText.Text.Trim());
18             }
19             catch (Exception ex)
20             {
21                 Response.Write(ex.Message);
22             }
23         }
24 
25         private static string TEST(string str)
26         {
27             ObjectClass oc = new ObjectClass();
28             return oc.GetWC().WebGetUserInfoByUserId(str);//调用WCF服务方法
29         }
30     }

 

 1 public class ObjectClass
 2     {
 3         /// <summary>
 4         /// WCF服务
 5         /// </summary>
 6         SR.InSideContract_WebSiteClient wc = new SR.InSideContract_WebSiteClient();
 7 
 8         /// <summary>
 9         /// 获取WCF服务对象
10         /// </summary>
11         /// <returns></returns>
12         public SR.InSideContract_WebSiteClient GetWC()
13         {
14             return wc;
15         }
16     }

 

 

源码下载 WCF通道报错检验Demo.rar

posted @ 2015-03-31 14:25  J.Y  阅读(1545)  评论(1编辑  收藏  举报