我在WCF代理中调用一个方法,其中绑定名为pipes。目前,代码失败并出现异常(与wmi相关 - 代码的作用),但是当我在同一代理中执行另一个方法时,我收到此错误:
写入管道时出错:无法识别错误232(0xe8)。
显然,这没有多大帮助。 Stacktrace是:
服务器堆栈跟踪:at System.ServiceModel.Channels.StreamConnection.BeginWrite(字节[] buffer,Int32 offset,Int32 size,Boolean immediate,TimeSpan timeout, AsyncCallback回调,对象状态) System.ServiceModel.Channels.FramingDuplexSessionChannel.SendAsyncResult.WriteCore() 在 System.ServiceModel.Channels.FramingDuplexSessionChannel.SendAsyncResult..ctor(FramingDuplexSessionChannel 通道,消息消息,TimeSpan超时,AsyncCallback回调, 对象状态) System.ServiceModel.Channels.FramingDuplexSessionChannel.OnBeginSend(消息 消息,TimeSpan超时,AsyncCallback回调,对象状态)at System.ServiceModel.Channels.OutputChannel.BeginSend(消息消息, TimeSpan超时,AsyncCallback回调,对象状态)at System.ServiceModel.Dispatcher.DuplexChannelBinder.BeginRequest(消息 消息,TimeSpan超时,AsyncCallback回调,对象状态)at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.StartSend(布尔 完成同步) System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.FinishEnsureOpen(IAsyncResult的 结果,布尔完成(异步)at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.StartEnsureOpen(布尔 完成同步) System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.FinishEnsureInteractiveInit(IAsyncResult的 结果,布尔完成(异步)at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.StartEnsureInteractiveInit() 在System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.Begin() 在System.ServiceModel.Channels.ServiceChannel.BeginCall(String action,Boolean oneway,ProxyOperationRuntime操作,Object [] ins, TimeSpan超时,AsyncCallback回调,Object asyncState)at System.ServiceModel.Channels.ServiceChannel.BeginCall(String action, Boolean oneway,ProxyOperationRuntime操作,Object [] ins, AsyncCallback回调,Object asyncState) System.ServiceModel.Channels.ServiceChannelProxy.InvokeBeginService(IMethodCallMessage methodCall,ProxyOperationRuntime operation)at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即时聊天 消息)
在[0]处重新抛出异常:at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即时聊天 reqMsg,IMessage retMsg)at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&安培; msgData,Int32 type)at x.xxx.xxxxx(String Path,AsyncCallback 回调,对象状态)在x.xproxy.begininstall(String path, AsyncCallback回调,对象状态) C:\ Users \ project \ AsyncProxy.cs:第38行 xxx.MainForm.begininstall(Object sender,EventArgs e)in C:\ Users \ project \ MainForm.cs:第647行 XPrintV7.MainForm.b__e()in C:\ Users \ Gurdip \ Desktop \ xproject \ MainForm.cs:第664行 System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj) 在System.Threading.ExecutionContext.runTryCode(Object userData)at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode 代码,CleanupCode backoutCode,Object userData)at System.Threading.ExecutionContext.RunInternal(执行上下文 executionContext,ContextCallback回调,对象状态)at System.Threading.ExecutionContext.Run(执行上下文 executionContext,ContextCallback回调,对象状态)at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry ())在System.Windows.Forms.Control.InvokeMarshaledCallbacks()
可能的原因是什么?
答案 0 :(得分:5)
错误消息告诉您,当客户端通道堆栈试图通过命名管道向服务发送消息时,发生了Win32错误ERROR_NO_DATA
。仅使用您提供的信息来诊断除此之外很困难,但它可能表明由于前面的WMI错误,命名管道的客户端和服务器端已进入不一致状态。当WMI异常发生时,您的客户端代码可能无法正确管理服务代理实例的状态。
您应该在客户端和服务端启用详细的WCF跟踪,这将更清楚地了解正在发生的事情。
此外,发布一些客户端代码以显示WMI异常发生的位置,以及如何在异常处理中处理服务代理,可能会使某人更准确地回答您的问题。