解决WCF 调用方未由服务器进行身份验证或消息包含无效或过期的安全上下文令牌

错误描述:

1. WCF:调用方未由服务器进行身份验证

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

3.或并发测试时,高并发出现问题2,实际案例:公司测试部门结果是并发到50就会出现问题2错误,并且平均响应时间也会很慢

解决后结果:

接口测试并发100无问题,并且平均响应时间减小5倍时间!

解决方法:

主要修改红色文本区域

<system.serviceModel>
   <bindings>
      <wsHttpBinding>
        <binding name="NoneSecurity"
          maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
          <readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
          <security mode="None"/>
        </binding>
      </wsHttpBinding>
    </bindings>

<services>
    <service name="WcfService2.Service1" behaviorConfiguration="WcfService2.Service1Behavior">
     <!-- Service Endpoints -->
     <endpoint address="" binding="wsHttpBinding" bindingConfiguration="NoneSecurity" contract="WcfService2.IService1">
      <!-- 
              部署时,应删除或替换下列标识元素,以反映
              在其下运行部署服务的标识。删除之后,WCF 将
              自动推导相应标识。
          -->
      <identity>
       <dns value="localhost"/>
      </identity>
     </endpoint>
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
   </services>
   <behaviors>
    <serviceBehaviors>
     <behavior name="WcfService2.Service1Behavior">
      <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点-->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息-->
      <serviceDebug includeExceptionDetailInFaults="false"/>
     </behavior>
    </serviceBehaviors>
   </behaviors>
</system.serviceModel>
</configuration>

客户端将security配置改为<security mode="None"/>

详细错误信息:

 

<p></p><p>System.ServiceModel.Security.MessageSecurityException was unhandled
  Message=An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.
  Source=mscorlib
  StackTrace:
    Server stack trace:
       at System.ServiceModel.Security.SecuritySessionClientSettings`1.SecurityRequestSessionChannel.ProcessReply(Message reply, TimeSpan timeout, SecurityProtocolCorrelationState correlationState)
       at System.ServiceModel.Security.SecuritySessionClientSettings`1.SecurityRequestSessionChannel.Request(Message message, TimeSpan timeout)
       at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
       at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
    Exception rethrown at [0]:
       at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       at ApiStressTest.SCCL.ISCCLSvc.GetCarriersByWareHouse(TransModel tm)
       at ApiStressTest.SCCL.SCCLSvcClient.GetCarriersByWareHouse(TransModel tm) in D:\SCCL\ApiTest.new\ApiStressTest\Service References\SCCL\Reference.cs:line 198
       at ApiStressTest.ServiceWrapper.ServiceAPIWrapperMethod(Object stateInfo) in D:\SCCL\ApiTest.new\ApiStressTest\SCCLProgram.cs:line 416
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart(Object obj)
  InnerException: System.ServiceModel.FaultException
       Message=无法处理消息。这很可能是因为操作“http://tempuri.org/ISCSvc/GetHouse”不正确,或因为消息包含无效或过期的安全上下文令牌,或因为绑定之间出现不匹配。如果由于未处于活动状态导致服务中止了该通道,则安全上下文令牌无效。若要防止服务永久中止闲置会话,请增加服务终结点绑定上的接收超时。
       InnerException:

</p><p>
</p>
时间: 2024-11-18 21:00:50

解决WCF 调用方未由服务器进行身份验证或消息包含无效或过期的安全上下文令牌的相关文章

WCF:调用方未由服务器进行身份验证

服务器webconfig端配置文件,红色部分为添加部分 <system.serviceModel> <bindings>       <wsHttpBinding>         <binding name="NoneSecurity"  maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy=&

异常排除: 调用方未由服务进行身份验证

一直在一台电脑上同时搞WCF的服务和客户端,今天在另外一台电脑上调用,发现了一个新的问题"调用方未由服务进行身份验证", 在网上查了大量的资料,也没有发现有人说明白其中的原因,只是发现了一篇解决的办法,但是个人感觉不是最佳的方案,所以还在探索中. 发现的解决的办法中提到,在服务端和客户端分别将安全验证设置成"none"就可以了,自己试了几遍也没成功.但是从理论上是行的通的. 另外呢发现了这样的一个解决办法,不知道有没有其它的见解 将 WCF 服务器和客户端分别部署到

解决WCF跨机器调用时发生“调用方未由服务进行身份验证”的错误

1.服务器端Web.config配置文件,增加如下部分: <system.serviceModel> <bindings> <wsHttpBinding> <binding name="WSHttpBinding_NoneSecurity" maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy=&

解决WCF调用时出现错误:“创建MTOM消息读取器时出错”

如题,查询一个数据集, 存储过程返回如:select * from B 中间层定义  public DataSet GetTable(string 查询条件); 客户端定义  DataSet ds = wcfClient.GetTable("") 以前一直正常着,查询也很快速,这两天不知修改到哪了,所有的查询如果返回记录较大时(100条左右),客户端就会出现服务端返回的异常错误"创建MTOM消息读取器时出错" 客户端 app.config 配置如下 <syst

ASP.NET 解决在点击Button执行服务器事件之前验证用户输入并阻塞

在网站项目开发时,为了减少用户的错误性的操作,很多时候我们都需要做一些必要的JS验证来提醒用户,比如:"输入的值不符合规则,请重新输入"."提交后无法修改,您确定要继续吗?"友好性的提示. 这时候我们想到了Button有一个客户端的点击事件(OnClientClick),大家知道,ASP.NET 页面ASPX页面被创建的时候会生成 一段代码 <input type="hidden" name="__EVENTTARGET"

PushSharp 由于远程方已关闭传输流,身份验证失败。

前段时间用到了PushSharp给APNS发推送,但是用的时候遇见很诡异的事情,每次第一次运行的时候能成功发送到 但是接下来就无限的提示“由于远程方已关闭传输流,身份验证失败. “ 然后我就各种找原因,找来找去,各种方式都试过了,但是还是不行...而且同事用php写的一个客服端却非常的流畅,简直疯了要 后来终于...找见原因了! 原来是我工作用的系统太老了...我用的还是xp系统,好像xp系统中对身份验证有个漏洞,结果导致程序无限报错,我把程序放到server2008上后就一切正常了... 简直

"最大工作进程数"导致的WCF调用失败

WCF服务寄宿在IIS中,当设置其"最大工作进程数"为2时,经常会出现服务无法被成功调用,具体异常信息如下: Type:System.ServiceModel.Security.MessageSecurityException Message:从另一方收到未进行安全处理或安全处理不正确的错误.有关错误代码和详细信息,请参见内部 FaultException. HelpLink: Source:System.ServiceModel.Internals TargetSite:TAsync

解决 SQL Server 所有帐号无 sysadmin 权限,且未启用 SQL Server 身份验证,sa 帐号也未启用的问题

解决 未启用 SQL Server 身份验证 的问题: 1. 运行 regedit,进入注册表编辑器 2. 打开:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQLServer( MSSQL14.MSSQLSERVER 这部分根据实际安装实例的名称来选择,若有多个实例,请打开需要设置的那个) 3. 找到其中的 LoginMode 项,值为 1 时仅 Windows 身份验证,值为

与身份验证HTTP服务器通信(Communicating with Authenticating HTTP Servers)

本文描述了如何利用CFHTTPAuthentication API与需要身份验证的HTTP服务器通信.它解释了如何找到匹配的验证对象和证书,并将它们应用到HTTP请求,然后存储以供以后使用. 一般来说,如果一个HTTP服务器返回一个401或407响应你的HTTP请求,这表明服务器进行身份验证需要证书.在CFHTTPAuthentication API中,每个证书组存储在CFHTTPAuthentication 对象中.因此,每个不同的身份认证服务器和每个不同用户连接的服务器需要一个单独的CFHT