我在C#
下面的代碼看起來在下面SOAP
報頭中的apiKey
:從的OperationContext
SOAP部首:
<soap:Header>
<Authentication>
<apiKey>CCE4FB48-865D-4DCF-A091-6D4511F03B87</apiKey>
</Authentication>
</soap:Header>
C# :
這就是我到目前爲止:
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;
}
問題:返回null
而非實際apiKey
值:
CCE4FB48-865D-4DCF-A091-6D4511F03B87
UPDATE 1:
我加了一些記錄。它看起來像h.Name
其實是「驗證」,這意味着它實際上不會尋找「apiKey」,這意味着它將無法檢索該值。
有沒有辦法抓住<Authentication />
裏面的<apiKey />
?
更新2:
結束了使用下面的代碼:
if (h.Name == "Authentication")
{
// Read the value of that header.
XmlReader xr = OperationContext.Current.IncomingMessageHeaders.GetReaderAtHeader(i);
xr.ReadToDescendant("apiKey");
apiKey = xr.ReadElementContentAsString();
}
什麼回來呢?您是否調試過應用程序和Web服務? Web服務上是否有相同的數據? –
嘗試在某處登錄h.Name的日誌值 –
我添加了日誌記錄。看到我上面的更新。 – fuzz