SOAP请求不能在一台机器上运行,但在另一台机器上运行得非常好

时间:2014-03-21 19:10:18

标签: .net vb.net soap msxml servicenow

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

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中发送完全相同的信封,并获得响应。这让我发疯了。

2 个答案:

答案 0 :(得分:1)

找出问题所在。我们的服务器上有多个域,与SOAP请求绑定的帐户位于我们的旧域中。新域尚未与ServiceNow集成,MSXML(我用来发送SOAP请求)试图通过新域进行直通身份验证。

因此,我的下一个目标是确保MSXML正在进行抢先身份验证,因为用于SOAP请求的此帐户是ServiceNow服务器的本地帐户。 I found something similar to my problem,所以我尝试了以下内容:

  1. 首先,我在SOAPUI中运行查询。
  2. 查看RAW选项卡,我拉出了&#34;身份验证:基本xxxxxx&#34;标题,并将其直接复制到我的代码中。
  3. 我将setRequestHeader添加到我的请求中,并且bam!它有效。
  4. 示例代码:

    oWSRequest.open("POST", sEndpointURL, False, gServiceNowUser, gServiceNowPass)
    oWSRequest.setRequestHeader("Content-Type", "text/xml")
    oWSRequest.setRequestHeader("Authorization", "Basic c3J2Y1FsaWt2aWV3X09EQkM6bzc3MzQ4QTI4TnZV")
    oWSRequest.send(oWSRequestDoc.xml)
    

答案 1 :(得分:0)

您可能被ServiceNow实例中的访问控制或其他安全性阻止。您收到的是有效的XML响应,这意味着您已建立了良好的连接。我只能想到两个可以产生零计数响应的东西。 (A)数据库中确实没有此号码的事件。 (B)事件存在,但ServiceNow不允许您查看它,因为您的Web服务用户帐户无法通过访问控制。