J'essaie d'implémenter un comportement de point de terminaison qui injecte un en-tête SOAP personnalisé dans tous les messages à destination et en provenance d'un service. Je suis devenu assez proche en mettant en œuvre l'approche de la réponse acceptée de cette question:Problèmes d'en-tête SOAP personnalisé WCF
WCF WSDL Soap Header on all operations
Après la mise en œuvre de cette solution, mon en-tête SOAP personnalisé ne montre en effet dans le WSDL; Cependant, lorsque je tente d'appeler les méthodes sur mon service, je reçois l'exception/faute suivante:
<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>
regardant dans réflecteur à la méthode DataContractSerializerOperationFormatter.AddHeadersToMessage thats de lancer l'exception, me porte à croire que l'extrait suivant est à l'origine du problème ... mais je ne sais pas pourquoi. Je pense que la dernière ligne ci-dessus lance l'exception. La variable parameters
provient de IDispatchFormatter.SerializeReply
Que se passe-t-il?!? !!
Toute aide serait grandement appréciée ...
Quelle est exactement la valeur de description.Index? Est-ce -1? – jrista
Je ne parviens pas à déboguer la méthode DataContractSerializerOperationFormatter.AddHeadersToMessage, mais les objets MessageHeaderDescription que j'injecte ont tous une valeur d'index égale à zéro. Je suppose que cette exception serait levée si 'parameters' était nul ou de longueur nulle, mais je n'ai pas de contrôle sur cette variable (je ne pense pas) – WayneC