【发布时间】:2010-12-30 13:59:59
【问题描述】:
我有一个基于 Windows 的应用程序,它使用托管在开发服务器的 IIS 中的 WCF 服务。我正在调用服务中定义的方法来在 SQL 数据库中运行 SSIS 包。该方法根据包执行成功与否向客户端返回成功或失败。
包始终在数据库中成功执行,但仅当包的执行时间超过大约 10 分钟时,服务才会抛出此错误。否则我不会收到此错误。
我已经尝试了以下方法但没有成功:-
- 将 app.config 中的客户端超时时间增加到更高的值,例如 20 分钟。
- 将
web.config中的httpRuntime executionTimeout 值增加到7200 秒这样的高值。
跟踪日志包含以下错误:-
安全处理器无法在邮件中找到安全标头。这可能是因为消息是不安全的错误,或者是因为通信双方之间存在绑定不匹配。如果服务配置了安全性并且客户端未使用安全性,则可能会发生这种情况。
堆栈跟踪:
System.ServiceModel.Security.SecurityStandardsManager.CreateReceiveSecurityHeader(Message message, String actor, SecurityAlgorithmSuite algorithmSuite, MessageDirection direction) System.ServiceModel.Security.MessageSecurityProtocol.CreateSecurityHeader(消息消息,字符串演员,MessageDirection transferDirection,SecurityStandardsManagerstandardsManager) System.ServiceModel.Security.MessageSecurityProtocol.ConfigureReceiveSecurityHeader(消息消息,字符串参与者,SecurityProtocolCorrelationState[] 相关状态,SecurityStandardsManager 标准管理器,IList
1& supportingAuthenticators) System.ServiceModel.Security.InitiatorSessionSymmetricMessageSecurityProtocol.VerifyIncomingMessageCore(Message& message, String actor, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates) System.ServiceModel.Security.MessageSecurityProtocol.VerifyIncomingMessage(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates) System.ServiceModel.Security.SecuritySessionClientSettings1.ClientSecuritySessionChannel.VerifyIncomingMessage(消息和消息,时间跨度超时,SecurityProtocolCorrelationState 相关状态) System.ServiceModel.Security.SecuritySessionClientSettings1.ClientSecuritySessionChannel.ProcessIncomingMessage(Message message, TimeSpan timeout, SecurityProtocolCorrelationState correlationState, MessageFault& protocolFault) System.ServiceModel.Security.SecuritySessionClientSettings1.ClientSecuritySessionChannel.ProcessRequestContext(RequestContext requestContext, TimeSpan timeout, SecurityProtocolCorrelationState correlationState) System.ServiceModel.Security.SecuritySessionClientSettings1.ClientSecuritySessionChannel.ReceiveInternal(TimeSpan timeout, SecurityProtocolCorrelationState correlationState) System.ServiceModel.Security.SecuritySessionClientSettings1.SecurityRequestSessionChannel.CloseOutputSession(时间跨度超时) System.ServiceModel.Security.SecuritySessionClientSettings1.ClientSecuritySessionChannel.CloseSession(TimeSpan timeout, Boolean& wasAborted) System.ServiceModel.Security.SecuritySessionClientSettings1.ClientSecuritySessionChannel.OnClose(时间跨度超时) System.ServiceModel.Channels.CommunicationObject.Close(时间跨度超时) System.ServiceModel.Channels.ServiceChannel.OnClose(时间跨度超时) System.ServiceModel.Channels.CommunicationObject.Close(时间跨度超时) System.RuntimeMethodHandle._InvokeMethodFast(对象目标,Object[] 参数,SignatureStruct& sig,MethodAttributes methodAttributes,RuntimeTypeHandle typeOwner) System.RuntimeMethodHandle.InvokeMethodFast(对象目标,对象 [] 参数,签名 sig,MethodAttributes 方法属性,RuntimeTypeHandle typeOwner) System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] 参数, CultureInfo 文化, Boolean skipVisibilityChecks) System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] 参数, CultureInfo 文化) System.ServiceModel.Channels.ServiceChannelProxy.ExecuteMessage(对象目标,IMethodCallMessage 方法调用) System.ServiceModel.Channels.ServiceChannelProxy.InvokeChannel(IMethodCallMessage methodCall) System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 消息) System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 类型) System.ServiceModel.ICommunicationObject.Close(时间跨度超时) System.ServiceModel.ClientBase1.System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout) System.ServiceModel.ClientBase1.Close() MemberPlus.MemberPlusShared.ServiceProxy`1.Dispose() MemberPlusDataLoads.DataLoads.ProcessData() MemberPlusDataLoads.DataLoads.DoProcessData() System.Threading.ThreadHelper.ThreadStart_Context(对象状态) System.Threading.ExecutionContext.runTryCode(对象用户数据) System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode 代码,CleanupCode backoutCode,对象 userData) System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态) System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) System.Threading.ThreadHelper.ThreadStart()
我也收到以下错误:
底层连接已关闭:预期保持活动状态的连接已被服务器关闭。
堆栈跟踪:
System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason) System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度超时) System.ServiceModel.Channels.RequestChannel.Request(消息消息,TimeSpan 超时) System.ServiceModel.Channels.ClientReliableChannelBinder
1.RequestClientReliableChannelBinder1.OnRequest(TRequestChannel channel, Message message, TimeSpan timeout, MaskingMode maskingMode) System.ServiceModel.Channels.ClientReliableChannelBinder1.Request(Message message, TimeSpan timeout, MaskingMode maskingMode) System.ServiceModel.Channels.ClientReliableChannelBinder1.Request(消息消息,TimeSpan超时) System.ServiceModel.Security.SecuritySessionClientSettings`1.SecurityRequestSessionChannel.Request(消息消息,TimeSpan超时) System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息消息,TimeSpan 超时) System.ServiceModel.Channels.ServiceChannel.Call(字符串操作,布尔单向,ProxyOperationRuntime 操作,Object[] 输入,Object[] 输出,TimeSpan 超时) System.ServiceModel.Channels.ServiceChannel.Call(字符串操作,布尔单向,ProxyOperationRuntime 操作,Object[] 输入,Object[] 输出) System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime 操作) System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 消息) System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 类型) IDataLoadService.LaunchPackage(String sourceType, String packageName, Int32 fileId, Int32 ign) DataLoadServiceClient.LaunchPackage(String sourceType, String packageName, Int32 fileId, Int32 ign) MemberPlusDataLoads.DataLoads.ProcessData() MemberPlusDataLoads.DataLoads.DoProcessData() System.Threading.ThreadHelper.ThreadStart_Context(对象状态) System.Threading.ExecutionContext.runTryCode(对象用户数据) System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode 代码,CleanupCode backoutCode,对象 userData) System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态) System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) System.Threading.ThreadHelper.ThreadStart()
我的 app.config :-
maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
web.config:
我在调用服务的客户端方法中使用断点以查看发生了什么,我发现客户端连接在超时(12 分钟)下设置的整个时间长度内保持打开状态,但服务器端不返回消息。
对问题可能出在哪里以及解决方案有什么想法吗?
【问题讨论】:
标签: wcf