当多个工作进程(Web Garden)时,异步WCF因MessageSecurityException而失败

时间:2011-08-12 10:23:37

标签: wcf exception asynchronous

我有一个使用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 []

0 个答案:

没有答案