0

使用来自以下网站的小型衍生产品:

http://servicenowsoap.wordpress.com/2013/10/26/vb-script/

...我在 VB.Net 而不是 VBScript 中实现调用。我正在使用 Microsoft XML 3.0 资源,并且在初始测试期间......它可以正常工作。我可以发送一个“getKeys”更新传递一个数字,它会返回 ServiceNow 所需的 sys_id 数字。

现在,当我发送任何 SOAP/XML 信封时,服务器会假装我发送了一些外来的东西。它返回 0 作为计数并且没有 sys_id。我尝试使用直接 XML 实现,并通过 Web 服务加载 WSDL。两者都返回相同的结果:什么都没有。

但是,当我在任何其他机器上尝试此代码时,它将使用完全相同的代码发送和接收 SOAP 请求,并按预期接收请求。

两台机器上的示例 SOAP 信封请求:

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <getKeys xmlns:tns="http://www.service-now.com/sc_req_item">
       <number> examplerequestnumber </number> 
     </getKeys>
  </soap:Body>
  </soap:Envelope>

在其他人的机器上返回什么:

  <?xml version="1.0" ?> 
- <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-   <SOAP-ENV:Body>
-     <getKeysResponse>
       <sys_id>examplesysidnumber</sys_id> 
      <count>1</count> 
  </getKeysResponse>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>

仅在我的机器上返回的内容:

  <?xml version="1.0" ?> 
- <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-   <SOAP-ENV:Body>
-     <getKeysResponse>
       </sys_id> 
      <count>0</count> 
  </getKeysResponse>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>

我的机器上有什么东西可能会阻止请求完成吗?我没有运行防病毒软件,也没有启动防火墙。但是,我可以在 SOAPUI 中发送完全相同的信封,并得到响应。这真让我抓狂。

4

2 回答 2

1

弄清楚问题出在哪里。我们的服务器上有多个域,与 SOAP 请求绑定的帐户在我们的旧域上。新域尚未与 ServiceNow 集成,MSXML(我用来发送 SOAP 请求的内容)尝试对新域进行直通身份验证。

因此,我的下一个目标是确保 MSXML 进行抢先式身份验证,因为用于 SOAP 请求的此帐户是 ServiceNow 服务器的本地帐户。我发现了与我的问题类似的东西,所以我尝试了以下方法:

  1. 首先,我在 SOAPUI 中运行查询。
  2. 查看 RAW 选项卡,我拉出“Authentication: Basic xxxxxx”标题,并将其直接复制到我的代码中。
  3. 我将 setRequestHeader 添加到我的请求中,然后砰!有用。

示例代码:

oWSRequest.open("POST", sEndpointURL, False, gServiceNowUser, gServiceNowPass)
oWSRequest.setRequestHeader("Content-Type", "text/xml")
oWSRequest.setRequestHeader("Authorization", "Basic c3J2Y1FsaWt2aWV3X09EQkM6bzc3MzQ4QTI4TnZV")
oWSRequest.send(oWSRequestDoc.xml)
于 2014-04-07T19:57:02.380 回答
0

您可能被 ServiceNow 实例中的访问控制或其他安全措施阻止。您正在接收有效的 XML 响应,这意味着您已经建立了良好的连接。我只能想到两件事会给出零计数响应。(A) 数据库中的这个数字确实没有任何问题。(B) 事件存在,但 ServiceNow 不允许您查看它,因为您的 Web 服务用户帐户未能通过访问控制。

于 2014-03-28T22:20:13.500 回答