Я пытаюсь реализовать поведение конечной точки, которое вставляет настраиваемый заголовок SOAP во все сообщения в службу и из службы. Я подошел довольно близко, реализовав подход из принятого ответа на этот вопрос:
WCF-заголовок мыла WSDL для всех операций
После реализации этого решения мой настраиваемый заголовок 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>
Взгляд в Reflector на метод DataContractSerializerOperationFormatter.AddHeadersToMessage, который вызывает исключение, заставляет меня поверить, что следующий фрагмент вызывает проблему ... но я не уверен почему.
MessageHeaderDescription description = (MessageHeaderDescription) headerPart.Description;
object parameterValue = parameters[description.Index];
Я думаю, что последняя строка выше выдает исключение. Переменная parameters
взята из IDispatchFormatter.SerializeReply
Что происходит?!? !!
Любая помощь будет принята с благодарностью ...