我有一个使用ws2007HttpBinding的简单WCF服务,它放入一个可配置的延迟,然后返回。该服务配置为PerCall。该服务托管在Windoes 2008 Server R2 SP1上的IIS 7.5上
我使用导入的服务引用通过控制台应用程序异步调用此方法。
我可以轻松注入10000个请求,但它们都是成功的。每个请求都使用新的WCF代理。 CPU运行率约为70%
我想看看添加另一个工作进程是否有助于吞吐量并利用完整的100%cpu。我将其配置为有2个工作进程。
当我运行它时,它几乎立即开始失败并出现MessageSecurityException。即使我将请求数设置为10,它仍然会失败。我注意到如果WCF服务中的计时器很短(10到50毫秒之间),它会失败。延迟越大,故障越少。
它在proxy.Open()或proxy.Close()
上失败我对此进行了调查,并认为这可能与安全对话有关。所以我禁用了这个 设置 establishSecurityContext = “假” (这是正确的吗?)我很困惑为什么每次创建一个新的代理都会出现这种情况
这种情况似乎没有任何区别。
当我返回AppPool只有一个工作进程时,它再次起作用
是否有人遇到同样的问题,并设法获得解决方案。如果是这样,你可以明确详细地发布解决方案。
收到的错误如下
在WCF跟踪中报告 传入消息不是现有安全会话的一部分
跟踪中显示的异常
System.ServiceModel.EndpointNotFoundException,System.ServiceModel,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
没有渠道可以接受带有“http://tempuri.org/ILoadedService/RunLoad”行动的消息。
在System.ServiceModel.Dispatcher.ErrorBehavior.ThrowAndCatch(例外e,消息消息)
在System.ServiceModel.Channels.DatagramChannelDemuxer 2.ProcessItem(TInnerItem item)
at System.ServiceModel.Channels.DatagramChannelDemuxer
2.HandleReceiveResult(IAsyncResult结果)
在System.ServiceModel.Channels.DatagramChannelDemuxer 2.OnReceiveComplete(IAsyncResult result)
at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
at System.ServiceModel.Channels.ReplyChannel.HelpReceiveRequestAsyncResult.OnReceiveRequest(IAsyncResult result)
at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
at System.Runtime.InputQueue
1.AsyncQueueReader.Set(Item item)
在System.Runtime.InputQueue 1.EnqueueAndDispatch(Item item, Boolean canDispatchOnThisThread)
at System.Runtime.InputQueue
1.EnqueueAndDispatch(T item,Action dequeuedCallback,Boolean canDispatchOnThisThread)
在System.ServiceModel.Channels.SingletonChannelAcceptor`3.Enqueue(QueueItemType项,Action dequeuedCallback,Boolean canDispatchOnThisThread)
在System.ServiceModel.Channels.HttpChannelListener.HttpContextReceived(HttpRequestContext context,Action callback)
在System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult结果)
在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest()
在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(Object state)
在System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode,UInt32 numBytes,NativeOverlapped * nativeOverlapped)
在System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32错误,UInt32 bytesRead,NativeOverlapped * nativeOverlapped)
在System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode,UInt32 numBytes,NativeOverlapped * pOVERLAP)
System.ServiceModel.EndpointNotFoundException:没有可以通过操作“http://tempuri.org/ILoadedService/RunLoad”接受消息的频道。
客户端上发现异常
类型[System.ServiceModel.Security.MessageSecurityException]抛出异常源[mscorlib] 接收响应时出现异常[9] - 消息[从另一方收到了不安全或不正确安全的故障。请参阅内部FaultException以获取故障代码和详细信息。] StackTrace [ 服务器堆栈跟踪: 在System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult结果) 在System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult结果) 在System.ServiceModel.Channels.ServiceChannel.EndCall(String action,Object [] outs,IAsyncResult result) 在System.ServiceModel.Channels.ServiceChannelProxy.InvokeEndService(IMethodCallMessage methodCall,ProxyOperationRuntime操作) 在System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
在[0]处重新抛出异常: 在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) 在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 type) 在SimpleIISTestClient.SlowClient.ILoadedService.EndRunLoad(IAsyncResult结果) at C:\ CRF中的SimpleIISTestClient.Program.PerfAsynchCallback(IAsyncResult结果)原型\ Load \ SimpleIISTestClient \ Program.cs:第116行] 内部异常[9] - 消息[安全上下文令牌已过期或无效。消息未处理。] StackTrace []