WebService调用其他WebService - 奇怪的行为

时间:2013-10-22 21:35:01

标签: vb.net web-services logging soap

我的WebServices日志记录存在一个奇怪的问题。

我们为公司提供后端服务。他们托管前端并使用我们的WS来提取客户端数据。当他们调用我们的WS时,我们调用他们的WS来验证用户,如果一切正常或者出于任何其他原因(例外,超时等)返回错误代码就继续。

他们一直遇到我们的Web服务问题(超时,性能低下),因此我们引入了登录WS以尝试跟踪请求/响应时间。 WS日志记录由2条记录组成 - 请求和响应。

一旦调用WS,就会创建请求记录,并包括客户提供的所有相关信息(帐号,电话等)。它还生成并记录请求一个唯一的HashId,它是请求和响应之间的链接。如果没有HashId,就很难链接请求/响应,因为响应可能在10秒后出现,日志中间会有数千条记录。

响应是在WS结束时创建的,它记录了之前创建的响应和HashID。

每个WS都有错误捕获,如果发生异常,将使用在WS调用开始时创建的HashID写入错误日志。

以下是问题: 大约90-95%的请求都有相应的响应。但是,有记录存在请求,但没有相应的HashID响应,也没有例外。更奇怪的是,我们有一个没有相应请求日志的响应!如果第一步是记录请求而HashId只分配一次,那该怎么办呢?有一点需要注意 - 流量很大,每秒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

0 个答案:

没有答案