【问题标题】:How can I catch WebServiceSessionID and send it to WebService again (ASMX / ASP Classic)如何捕获 WebServiceSessionID 并将其再次发送到 WebService (ASMX / ASP Classic)
【发布时间】:2021-09-03 14:29:07
【问题描述】:

我在这里真的很艰难,这是我第一次使用 ASMX WebServices,所以我正在对此进行反复试验,所以请在这方面与我交流。

我已经能够使用下面的 ASP Classic 连接并登录服务,但现在“碰壁”了,我无法在这里找到解决方案或通过谷歌搜索,可能是因为我一个菜鸟,不知道要照顾什么。

当我调用以下脚本时,我收到以下错误:

过程或函数“stp_ws_GetWebServiceSessionBySessionID”需要参数“@WebServiceSessionID”,但未提供该参数

我目前的脚本:

Set oXmlHTTP = CreateObject("Microsoft.XMLHTTP")
oXmlHTTP.Open "POST", "https://api.domain.com/services/ws3.asmx", False 

oXmlHTTP.setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
oXmlHTTP.setRequestHeader "SOAPAction", "http://sub.domain.com/GetCurrentCallStats4"

SOAPRequest = _
"<?xml version=""1.0"" encoding=""utf-8""?>" &_
"<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" &_

"<soap12:Body>" &_
    "<Login xmlns=""http://sub.domain.com/Login"">" &_
    "<UserIdentifier>a81aeXX-XXXXXXXXXXX-XXX4bec7</UserIdentifier>" &_
    "<PrivateKey>71e3aXX-XXXXXXXXXXX-XXX9e2</PrivateKey>" &_
    "<PublicKey>XD87XX-XXXXXXXXXXX-XXXC45</PublicKey>" &_
    "</Login>" &_  
    "<GetCurrentCallStats4Response xmlns=""https://api.domain.com/services/ws3.asmx"">" &_
    "<GetCurrentCallStats4Result>" &_
        "<StatResult4>" &_
        "<CustomerID>int</CustomerID>" &_
        "<SiteID>int</SiteID>" &_
        "<BrandID>int</BrandID>" &_
        "<CategoryID>int</CategoryID>" &_
        "<Category>string</Category>" &_
        "<TotalCases>int</TotalCases>" &_
        "<NewSince>dateTime</NewSince>" &_
        "<CasesNewSince>int</CasesNewSince>" &_
        "<CasesDue>int</CasesDue>" &_
        "</StatResult4>" &_
    "</GetCurrentCallStats4Result>" &_
    "</GetCurrentCallStats4Response>" &_
"</soap12:Body>" &_
"</soap12:Envelope>"

oXmlHTTP.send SOAPRequest    
Response.Write oXmlHTTP.responseText

如何“捕获”@WebServiceSessionID 并将其再次发送到 WS?

*如果有人也可以帮助我了解如何从服务中获取数据响应的下一步,我将非常感激:-)

更新!他们提供的小文档

对于每个 Web 服务键,您必须重复以下步骤来收集类别级别的统计信息:

使用https://api.domain.com/services/ws3.asmx 的网络服务:

  • 调用Login(),并保存返回的会话标识符
  • 调用GetSite(),使用会话标识符和私钥——保存名称值
  • 调用GetCurrentCallStats3() - 这将返回一个类别列表/数组,其中每个类别具有不同的监视器值。
    • NewCasesSince – 我们使用当天的开始时间,较旧的值使用更多资源,并可能导致调用因过度使用资源而终止。 日期的格式是 YYYY-MM-DD HH:mm 例如2017-09-30 00:00 您可以将其选择为更新的日期/时间 - 例如1 小时前显示最近一小时内的新病例。
    • HoursUntilDue - 这控制结果中返回的值 CasesDueInXMinutes 我们的监视器将此值设置为 4 - 未来 4 小时内到期的案例计数。
  • 致电Logout()

【问题讨论】:

  • 如果我没记错的话,这个错误是指传递给 SQL Server 存储过程的缺少参数。如果您是说通过运行上面的代码得到了这个错误,那么它一定是在 ASMX WebService 上发生的。您有权访问 WebService 代码库吗?无论哪种方式,它都与您发布的代码无关。
  • 另外oXmlHTTP.responseText 是“捕获的响应”,所以也不确定你的意思。
  • 您好@user692942 不幸的是,ASMX 是由另一家公司提供的,我无法访问 SQL 或 ASMX 代码。该服务的文档 - 在我看来 - 很差 - 我会在几分钟内发布文档,尽管它并不多,但它是我所拥有的。
  • @AlwaysLearning Classic ASP 不是 ASP.Net,您说的是使用 wsdl.exe 为 ASP.Net Web 应用程序生成客户端存根,但事实并非如此。
  • 您可能会发现 thisthis 很有帮助。

标签: web-services soap asp-classic asmx


【解决方案1】:

从 Visual Studio 创建一个 Web 服务引用,它将从 URL 创建一个类定义以调用 Web 服务?研究服务参考。 这将帮助您发送和检索您可能需要的数据。或者甚至尝试免费的 SOAPUI,它允许您为 Web 服务设置测试客户端,这样您就可以看到数据是如何传递和返回的,以及您丢失的数据。 https://www.soapui.org/

【讨论】:

  • 这是使用 ASP.Net Web 应用程序的好建议,但除了 SoapUI 对经典 ASP 不是很有用。
  • 这对 Classic ASP 非常有用,代码可能无法移植到 Classic ASP,但生成的代码会让他们了解如何构建自己的代码。 SoapUI 也不能在 Classic ASP 中使用,但它对于查看实际的 Web 客户端 xml 请求和响应很有用。 Wsdl.exe 也可用于创建有用的示例。他们没有文档,所以一个工作示例会有所帮助。
  • 错误是:过程或函数'stp_ws_GetWebServiceSessionBySessionID'需要参数'@WebServiceSessionID',没有提供这意味着当你调用函数时,你没有提供它想要的变量,在这种情况下您正在那里寻找的会话 ID。 deka81 解释了如何获取该变量,所以现在您需要做的就是将其挂接到函数中。问题是您发布了一些非 asp 代码,似乎是肥皂,所以我只需要编造一个例子。制作函数:
  • 但要使我的评论生效,我们必须首先设置 WebServiceSessionID = 它的真正含义,这就是问题所在。如果它是 ASP Classic 中固有的东西,我可以提供建议,但从未使用过那个,但让我想起自定义的,你可以让自己使用 Session 变量来存储连接和用户登录,而不是唯一的 id。引用 - 在这里检查 asp 函数w3schools.com/ASp/asp_procedures.asp 编辑 - 我刚刚注意到该变量上的 @ 符号......这可能是汇集 MySQL 数据吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多