0

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
4

0 に答える 0