我试图实现一个端点行为,它将一个自定义SOAP头插入所有发往和来自服务的消息中。我已经得到了通过实现从这个问题的答案接受的做法相当接近:WCF自定义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方法多数民众赞成抛出异常,使我相信,下面的代码片段造成这个问题...但我不知道为什么。
MessageHeaderDescription description = (MessageHeaderDescription) headerPart.Description;
object parameterValue = parameters[description.Index];
我认为上面的最后一行是抛出异常。 parameters
变量是从IDispatchFormatter.SerializeReply
发生了什么?!?!!
任何帮助将不胜感激......
到底是什么description.Index的价值?是-1吗? – jrista 2010-03-02 06:09:42
我无法调试到DataContractSerializerOperationFormatter.AddHeadersToMessage方法,但我注入的MessageHeaderDescription对象都有一个索引值为零。我想这会抛出这个异常,如果'parameters'为null或零长度,但我没有控制该变量(我不认为) – WayneC 2010-03-02 21:48:42