3

使用 C# 客户端和服务器通过 WCF 进行 RESTful 调用,客户端跟踪会暴露此错误:

“信封版本 'EnvelopeNone (http://schemas.microsoft.com/ws/2005/05/envelope/none)' 不支持添加邮件标头。”

完整的堆栈跟踪是:

System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

Envelope Version 'EnvelopeNone (http://schemas.microsoft.com/ws/2005/05/envelope/none)' does not support adding Message Headers.

at System.ServiceModel.Channels.MessageHeaders.ValidateHeaderKind(HeaderKind headerKind)
at System.ServiceModel.Channels.MessageHeaders.GetHeaderKind(MessageHeaderInfo headerInfo)
at System.ServiceModel.Channels.MessageHeaders.Insert(Int32 headerIndex, MessageHeader header)
at System.ServiceModel.Channels.MessageHeaders.Add(MessageHeader header)
at Microsoft.VisualStudio.Diagnostics.ServiceModelSink.DiagosticsMessage.AddHeader(String scheme, Boolean enableHttpHeaderUsage, Message message, Byte[] networkBuffer)
at Microsoft.VisualStudio.Diagnostics.ServiceModelSink.EnabledClientEventSink.BeforeSendMessage(Int32 eventingLevel, Message request, IClientChannel channel, ClientRuntime runtime, Boolean fCallback, Boolean fSupportAsmx)
at Microsoft.VisualStudio.Diagnostics.ServiceModelSink.StubClientEventSink.System.ServiceModel.Dispatcher.IClientMessageInspector.BeforeSendRequest(Message& request, IClientChannel channel)
at System.ServiceModel.Dispatcher.ImmutableClientRuntime.BeforeSendRequest(ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.PrepareCall(ProxyOperationRuntime operation, Boolean oneway, ProxyRpc& rpc)
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)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Fact.Apprentice.WorkflowServer.IWorkflowEngineBase.Dequeue(Int32 wfid, Int32 mqid)
at Fact.Apprentice.WorkflowTools.WorkflowProxyManager.ProcessCallback(Object state, Boolean timedOut)
at System.Threading._ThreadPoolWaitOrTimerCallback.WaitOrTimerCallback_Context(Object state, Boolean timedOut)
at System.Threading._ThreadPoolWaitOrTimerCallback.WaitOrTimerCallback_Context_t(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(Object state, Boolean timedOut)

据我所知,我没有添加任何标题。似乎某种 .NET 诊断过程正在添加自己的。

我的理解也是,过去没有使用 MessageHeaders.Add 进行基于 REST 的标头操作。这是 WCF 诊断区域中的错误/错误配置吗?我应该去哪里解决这个问题?

额外:有趣的是,WCF REST 调用确实有效,即使出现此错误。但是,最终超时会导致整个事情失败。不能说超时是否与此有关。

4

0 回答 0