【发布时间】:2010-03-02 01:08:20
【问题描述】:
我正在尝试实现一个端点行为,它将自定义 SOAP 标头注入到服务的所有消息中。通过实施这个问题的公认答案中的方法,我已经非常接近了:
WCF WSDL Soap Header on all operations
实施该解决方案后,我的自定义 SOAP 标头确实出现在 WSDL 中;但是,当我尝试调用我的服务上的方法时,我得到以下异常/错误:
<ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HelpLink i:nil="true" />
<InnerException i:nil="true" />
<Message>Index was outside the bounds of the array.</Message>
<StackTrace> at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.AddHeadersToMessage(Message message, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.OperationFormatter.SerializeReply(MessageVersion messageVersion, Object[] parameters, Object result)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.SerializeOutputs(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace>
<Type>System.IndexOutOfRangeException</Type>
</ExceptionDetail>
在反射器中查看引发异常的 DataContractSerializerOperationFormatter.AddHeadersToMessage 方法,让我相信以下 sn-p 导致了问题......但我不确定为什么。
MessageHeaderDescription description = (MessageHeaderDescription) headerPart.Description;
object parameterValue = parameters[description.Index];
我认为上面的最后一行是抛出异常。 parameters 变量来自IDispatchFormatter.SerializeReply
这是怎么回事?!?!!
任何帮助将不胜感激...
【问题讨论】:
-
description.Index 的值究竟是什么?是-1吗?
-
我无法调试到 DataContractSerializerOperationFormatter.AddHeadersToMessage 方法,但我注入的 MessageHeaderDescription 对象的索引值都为零。我想如果
parameters为空或零长度,这会抛出该异常,但我无法控制该变量(我不认为)