WebServices のログに奇妙な問題があります。
企業向けのバックエンドサービスを提供しています。フロントエンドをホストし、WS を使用してクライアント データをプルします。彼らが私たちの WS を呼び出すと、私たちは彼らの WS を呼び出してユーザーを検証し、すべてが正常であるか、他の理由 (例外、タイムアウトなど) でエラー コードを返すかどうかを続行します。
彼らは私たちの Web サービスに問題 (タイムアウト、低パフォーマンス) を抱えていたので、リクエスト/レスポンスのタイミングを追跡するために WS へのログインを導入しました。WS ロギングは、リクエストとレスポンスの 2 つのレコードで構成されます。
要求レコードは、WS が呼び出されるとすぐに作成され、クライアントが提供するすべての関連情報 (アカウント番号、電話番号など) が含まれます。また、リクエストとレスポンスの間のリンクである一意の HashId を生成してログに記録します。HashId がないと、リクエスト/レスポンスをリンクするのが難しくなります。レスポンスが 10 秒後に来る可能性があり、ログにはその間に何千ものレコードが含まれるからです。
応答は WS の最後に作成され、以前に作成された応答と HashID がログに記録されます。
すべての WS にはエラー トラップがあり、例外が発生した場合、WS 呼び出しの開始時に作成された HashID を使用してエラー ログが書き込まれます。
ここで質問です。リクエストの約 90 ~ 95% には、対応する応答があります。ただし、リクエストはあるが、対応する HashID を持つレスポンスがなく、例外がないレコードがあります。さらに奇妙なのは、対応するリクエスト ログのないレスポンスがあることです。最初のステップがリクエストをログに記録することであり、HashId が 1 回しか割り当てられない場合はどうすればよいでしょうか? 1 つ注意すべき点 - トラフィックが多く、1 秒あたり 10 ~ 20 の固有の呼び出しがあります。
これは私たちが持っている非常に単純な WS です (いくつかの行をカットしましたが、原則は同じままです - リクエストをログに記録し、WS オブジェクトとレスポンス オブジェクトを初期化し、他の WS を呼び出し、例外がなければレスポンスをログに記録し、例外があればエラーをログに記録します):
Public Function getAccountBills(ByVal AccountID As String, Optional ByVal PinCode As String = "") As Boolean
Dim request As New Bills.getAccountBills
Dim response1 As Bills.getAccountBillsResponse
Dim client As New Bills.AccountBillsRetrieveClient
Dim hashID As String = ""
Try
' generate unique HashID using supplied parameters, date and a random string
hashID = GetLogHash(AccountID & PinCode & Now.ToString & GetRandomString)
'log request with HashID and client supplied parameters
Log(String.Format("REQUEST ({3}): HashID=[{0}], AccountID=[{1}], PinCode=[{2}]", hashID, AccountID, PinCode))
' set up WS object
SetupWebService(client, "AccountBillSummaryRetrieve")
' setup a response object
request.AccountBillsRetrieveV1Request = New Bills.AccountBillsRetrieveV1Request
' call client WS with paramaters and get a response
response1 = client.retrieveAccountBills("ABCD", "1234", request)
' log response with HashID
Log(String.Format("RESPONSE ({1}) OK: HashID=[{0}]", hashID))
Return True
Catch ex As Exception
' Log
Log(String.Format("RESPONSE ({1}) ERROR: HashID=[{0}] Error=[{1}]", hashID, ex.ToString))
Return False
End Try
End Function