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

通信对象 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的方式如下(关键部分代码):

public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnOK_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrWhiteSpace(this.txtText.Text.Trim()) || String.IsNullOrEmpty(this.txtText.Text.Trim()))
            {
                Response.Write("亲,把这个框框填了吧");
                return;
            }
            try
            {
                lblMsg.Text = TEST(txtText.Text.Trim());
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        private static string TEST(string str)
        {
            ObjectClass oc = new ObjectClass();
            return oc.GetWC().WebGetUserInfoByUserId(str);//调用WCF服务方法
        }
    }
public class ObjectClass
    {
        /// <summary>
        /// WCF服务
        /// </summary>
        SR.InSideContract_WebSiteClient wc = new SR.InSideContract_WebSiteClient();

        /// <summary>
        /// 获取WCF服务对象
        /// </summary>
        /// <returns></returns>
        public SR.InSideContract_WebSiteClient GetWC()
        {
            return wc;
        }
    }


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



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864