Coldfusion SOAP请求预览

时间:2012-09-14 03:38:24

标签: asp.net soap coldfusion coldfusion-8

我需要使用ColdFusion 8使用asp.net Web服务并返回XML文件。

我能够与asp.net服务进行通信,但是从服务中返回了一个错误,基本上说我传递的信息无效。

以下是我的代码:

<cfxml variable="soap">
<?xml version="1.0" encoding="UTF-8" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"   
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <soap:Body>
<cfoutput> <GetSession xmlns="#stagingurl#"></cfoutput>  
  <strApplicationKey>myappkey</strApplicationKey>
  <UID>myuserid</UID>
  <arrProperties>
    <Property>
      <Name>IP</Name>
      <Value>127.0.0.1</Value>
    </Property>
  </arrProperties>
  <arrRoles />
</GetSession>
</soap:Body>
</soap:Envelope>         
</cfxml>

<cfhttp url="#apiurl#" method="post" result="httpresponse" port="443">

  <cfhttpparam type="header" name="content-type" value="text/xml"> 
  <cfhttpparam type="header" name="SOAPAction" value="#mysoapaction#"> 
  <cfhttpparam type="header" name="content-length" value="#len(trim(soap))#"> 
  <cfhttpparam type="header" name="charset" value="utf-8">
  <cfhttpparam type="Body" value="#trim(soap)#" name="FileContent"/>  

</cfhttp>

<cfdump var="#GetHttpRequestData()#" label="Get Http Request Data" />

有没有办法预览发送的信息以确保ColdFusion实际发送我的XML / SOAP请求?

我确实使用#GetHttpRequestData()#来返回一些数据,在结构中,内容是“空字符串”,这是我需要帮助的地方。这应该是空的吗?这对我来说是新的,但是,我想我希望我传递给asp.net服务的信息会在那里。

仅供参考 - 我可以看到HTTP和SOAP响应很好,我只是看不到请求信息。如何查看请求信息?

仍然试图确定问题是否在我的最终,或他们的问题,并且需要在此时收集事实。

3 个答案:

答案 0 :(得分:2)

使用Web服务时,另一个宝贵的工具是soapUI。这绝对应该是您的工具包的一部分。您可以使用soapUI构建请求并检查响应。使用soapUI后,您可以将请求复制到ColdFusion代码中。

我注意到的一件事是您将XML包装在cfxml标记中。我不确定这是否会弄乱您的请求。我通常将我的XML请求包装在cfsavecontent标记中。所以你可以尝试改变你的代码:

<cfsavecontent variable="soap">
<?xml version="1.0" encoding="UTF-8" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
   <cfoutput> <GetSession xmlns="#stagingurl#"></cfoutput>  
   <strApplicationKey>myappkey</strApplicationKey>
   <UID>myuserid</UID>
   <arrProperties>
     <Property>
       <Name>IP</Name>
       <Value>127.0.0.1</Value>
     </Property>
   </arrProperties>
   <arrRoles />
   </GetSession>
   </soap:Body>
</soap:Envelope>         
</cfsavecontent>

其余代码可以保持不变。

答案 1 :(得分:1)

如果你在Windows上(或者有一台Windows机器)安装Fiddler并启动它。它是一个默认侦听端口8888的代理,所以在你的cfhttp调用中,添加proxyServer =“127.0.0.1”和proxyPort =“8888”并再次运行你的请求。

注意到你正在使用443端口,所以可能是SSL。您可以启用HTTPS解密工具 - &gt; Fiddler选项 - &gt; HTTPS标签 - >解密HTTPS流量。您可能还需要import the Certificate that Fiddler uses into your keystore

现在每个请求都会显示在Fiddler中,您可以使用右侧的请求和响应检查器来查看服务器之间的确切数据(“原始”选项卡显示数据未更改)。这为我节省了很多次,现在已成为我标准工具包的一部分。

在您的特定情况下,您是否有使用CreateObject(“webservice”,“http:// ....”)的原因。我假设它在基于.Net的网络服务上表现不佳?

此外,对GetHttpRequestData()的调用显示了您对测试页面的请求,而不是您对测试Web服务的HTTP调用。不幸的是,CFHTTP不会返回任何显示其使用的完整HTTP请求详细信息的结构。我认为这将是一个非常合理的功能请求,因为目前,你将不得不使用像fiddler或wireshark这样的工具来查看发送的内容。

答案 2 :(得分:0)

dot net的简单问题是,它无法处理coldfusion创建的XML文档。要将XML返回到dot net,请转换为字符串格式(XMLvariable.Tostring)

HTTP请求的参数应为
<cfhttpparam type="Body" value="#trim(soap).ToString#" name="FileContent"/>