代码之家  ›  专栏  ›  技术社区  ›  crackedcornjimmy

我需要加速.NET WebService对经典ASP WebServices的调用

  •  1
  • crackedcornjimmy  · 技术社区  · 16 年前

    我正在从.NET应用程序调用经典的ASP Web服务。我有两个WebService处理速度慢和处理速度快的实例。

    慢的方法(最多几秒钟)是我实际读取返回的数据,如下所示:

    Dim oRequestAOCP As WebRequest
    Dim oResponseAOCP As HttpWebResponse = Nothing
    Dim dataStreamAOCP As Stream = Nothing
    Dim readerAOCP As StreamReader = Nothing
    Dim responseFromServerAOCP As String
    
    Dim sAOCP = Session("SecureURL") & "/services/rtOrderEntryAOCP.asp"
    sAOCP = sAOCP & "?coskey=" & Server.UrlEncode(Session("GUID"))
    sAOCP = sAOCP & "&OrderID=" & Server.UrlEncode(Session("OrderID"))
    
    oRequestAOCP = WebRequest.Create(sAOCP)
    
    oRequestAOCP = CType(oRequestAOCP, HttpWebRequest)
    oRequestAOCP.Method = "GET"
    oResponseAOCP = CType(oRequestAOCP.GetResponse(), HttpWebResponse)
    
    dataStreamAOCP = oResponseAOCP.GetResponseStream()
    readerAOCP = New StreamReader(dataStreamAOCP)
    responseFromServerAOCP = readerAOCP.ReadToEnd()
    
    Dim xmlAOCP As New XmlDocument()
    xmlAOCP.LoadXml(responseFromServerAOCP)
    Dim nodeAOCP As XmlNodeList = xmlAOCP.GetElementsByTagName("SUCCESS")
    Dim valueAOCP = CBool(nodeAOCP(0).InnerText)
    

    然后,下面是相当快的(次秒),在这里我只希望返回HTTP状态,而没有其他内容——这不是一个好的mo,因为在大多数情况下需要从WebServices返回数据。

    Dim oRequest As WebRequest
    Dim oResponse As HttpWebResponse = Nothing
    Dim oEmail As New Email()
    
    'now, call the webservice to get the AESBlock
    Dim strUrl = Session("SecureURL") & "/services/rtOrderEntryStatusUpdate.asp"
    strUrl = strUrl & "?GUID=" & Server.UrlEncode(Session("MISCGUID"))
    strUrl = strUrl & "&Status=" & Server.UrlEncode(sStatus)
    strUrl = strUrl & "&Error=" & Server.UrlEncode(sError)
    
    'make the call to the webservice to prime the order
    oRequest = WebRequest.Create(strUrl)
    oRequest = CType(oRequest, HttpWebRequest)
    oRequest.Method = "GET"
    oResponse = CType(oRequest.GetResponse(), HttpWebResponse)
    

    当我需要返回数据时,我可以做些什么来加快速度?

    2 回复  |  直到 15 年前
        1
  •  1
  •   maxthephilosopher    15 年前

    在研究了更多关于这个场景的内容之后。system.net.webclient可能会给出解决方案。至少在我使用的示例中,看起来非常快。你可以试试看它是否能缩短一段时间。

        Dim oRequestAOCP As WebRequest
        Dim oResponseAOCP As HttpWebResponse = Nothing
        Dim dataStreamAOCP As Stream = Nothing
        Dim readerAOCP As StreamReader = Nothing
        Dim responseFromServerAOCP As String
    
        Dim sAOCP = Session("SecureURL") & "/services/rtOrderEntryAOCP.asp"
        sAOCP = sAOCP & "?coskey=" & Server.UrlEncode(Session("GUID"))
        sAOCP = sAOCP & "&OrderID=" & Server.UrlEncode(Session("OrderID"))
    
        Dim objWebClient As New WebClient
    
        dataStreamAOCP = objWebClient.OpenRead(sAOCP)
        readerAOCP = New StreamReader(dataStreamAOCP)
        responseFromServerAOCP = readerAOCP.ReadToEnd()
    
        Dim xmlAOCP As New XmlDocument()
        xmlAOCP.LoadXml(responseFromServerAOCP)
        Dim valueAOCP = CBool(xmlAOCP.SelectSingleNode("//SUCCESS").InnerText)
    
        2
  •  0
  •   maxthephilosopher    15 年前

    看不到你还能做什么来剃掉几秒钟。我唯一能想到的就是直接从XML文档中获取ValueAOCP。我认为这里的性能主要是响应大小的一个因素,因为其他所有东西都与其他Web服务相同。因此,如果您有能力这样做,请考虑减小响应的大小。


    Dim xmlAOCP As New XmlDocument()
    xmlAOCP.LoadXml(responseFromServerAOCP)
    Dim valueAOCP = CBool(xmlAOCP.SelectSingleNode("//SUCCESS").InnerText)