Mam następujący kod w C#
, który wygląda na apiKey
w następującym SOAP
nagłówka:Uzyskanie wartości w nagłówku SOAP z OperationContext
nagłówka SOAP:
<soap:Header>
<Authentication>
<apiKey>CCE4FB48-865D-4DCF-A091-6D4511F03B87</apiKey>
</Authentication>
</soap:Header>
C# :
Oto, co do tej pory miałem:
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;
}
PROBLEM: Wracając null
zamiast rzeczywistej wartości apiKey
:
CCE4FB48-865D-4DCF-A091-6D4511F03B87
UPDATE 1:
dodałam trochę rejestrowanie. Wygląda na to, że h.Name
jest w rzeczywistości "Uwierzytelnieniem", co oznacza, że faktycznie nie będzie szukał "apiKey", co oznacza, że nie będzie w stanie odzyskać wartości.
Czy istnieje sposób na pobranie <apiKey />
wewnątrz <Authentication />
?
UPDATE 2:
Skończyło się za pomocą następującego kodu:
if (h.Name == "Authentication")
{
// Read the value of that header.
XmlReader xr = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(i);
xr.ReadToDescendant("apiKey");
apiKey = xr.ReadElementContentAsString();
}
co wraca wtedy? Czy debugujesz aplikację i usługę internetową? Czy te same dane są osiągane w serwisie? –
Spróbuj zarejestrować wartość h.Nazwa gdzieś –
Dodałem rejestrację. Zobacz moją aktualizację powyżej. – fuzz