tengo el siguiente código en C#
que busca una apiKey
en el la SOAP
encabezado siguiente:La obtención de un valor dentro de un encabezado de jabón de los OperationContext
de SOAP Header:
<soap:Header>
<Authentication>
<apiKey>CCE4FB48-865D-4DCF-A091-6D4511F03B87</apiKey>
</Authentication>
</soap:Header>
C# :
Esto es lo que tengo hasta ahora:
public string GetAPIKey(OperationContext operationContext)
{
string apiKey = null;
// Look at headers on incoming message.
for (int i = 0; i < OperationContext.Current.IncomingMessageHeaders.Count; i++)
{
MessageHeaderInfo h = OperationContext.Current.IncomingMessageHeaders[i];
// For any reference parameters with the correct name.
if (h.Name == "apiKey")
{
// Read the value of that header.
XmlReader xr = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(i);
apiKey = xr.ReadElementContentAsString();
}
}
// Return the API key (if present, null if not).
return apiKey;
}
PROBLEMA: Volviendo null
en lugar del valor real apiKey
:
CCE4FB48-865D-4DCF-A091-6D4511F03B87
ACTUALIZACIÓN 1:
I añadido algunas de registro. Parece que h.Name
es de hecho "Autenticación", lo que significa que en realidad no buscará "apiKey", lo que significa que no podrá recuperar el valor.
¿Hay alguna manera de tomar el <apiKey />
dentro de <Authentication />
?
ACTUALIZACIÓN 2:
Acabé usando el siguiente código:
if (h.Name == "Authentication")
{
// Read the value of that header.
XmlReader xr = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(i);
xr.ReadToDescendant("apiKey");
apiKey = xr.ReadElementContentAsString();
}
lo que está regresando entonces? ¿Ha depurado la aplicación y el servicio web? ¿Se alcanzan los mismos datos en el servicio web? –
Intente registrar el valor de h.Name en algún lugar –
He agregado el registro. Ver mi actualización arriba. – fuzz