如何从C#中调用ColdFusion webservice?

15

我正在尝试使用一个带有端点https://services.example.com/ASP_SecureWebServices.cfc?wsdl的web服务。

在文档中,我有以下内容:

请求

<authorise>
  <site>xxx</site>
  <login>xxx</login>
  <password>xxx</password>
  <partnerid>xxx</partnerid>
  <wstype>xpt_exhibitors</wstype>
</authorise>

已认证响应

<authorisation>
  <service>getAuthToken</service>
  <authorised>OK</authorised>
  <authtoken>255461</authtoken>
</authorisation>

我之前从未使用过ColdFusion,因此不了解如何进行请求。有人可以帮忙吗?

我已经像这样添加了服务引用:

屏幕截图

但我不明白这个方法:

屏幕截图


你是将它添加为Web引用还是服务引用?另外,你能展示一下调用该服务的代码吗? - Candide
这是一个服务引用。没有代码,我试图使用Visual Studio中的易于“即插即用”的功能,对于所有WCF Web服务都适用于我,但在这里却不起作用。 - Ateik
1
请注意您在两个截图中显示的内容。第一个指示ASP_Secure...而另一个是ASP_Export...这些是不同的服务。我想知道您是否为两个服务使用了相同的服务名称,导致出现混淆。 - Candide
http://chakkaradeep.wordpress.com/2007/08/13/add-service-reference-in-vs-2008/ - Nathan
一个公共的WSDL服务URL示例。http://dgpys.teias.gov.tr/dgpys/services/EVDServis?wsdl 尝试使用此链接检查问题是Coldfusion webservice还是您这边的问题。 - Nathan
显示剩余3条评论
3个回答

11

实际上,您正在直接访问CFC,但是您在末尾添加了"?wsdl"以使其返回WSDL。

此外,您希望在该CFC中访问的所有方法都需要使用 access="remote" 属性。

因此,您的实际端点将更接近于此:

https://services.example.com/ASP_SecureWebServices.cfc?wsdl

我认为端点是正确的,因为当我在Visual Studio中将其添加为服务引用时,我会得到一系列方法。但是,在创建客户端之后,我无法从代码中访问这些方法。 - Ateik
2
你最初列出的是指向CFC Javadocs的结果URL。它将为您提供一种友好的HTML表示形式,显示对象上的方法、组件、方法或参数中添加的任何提示、数据类型等。但这不同于用于Web服务的WSDL。如果我在本地开发,我会直接在我的Web浏览器中访问用户的CFC。因此,类似http://localhost/mysite/ASP_SecureWebServices.cfc的东西,这将重定向我到像上面描述的URL,要求CF密码。但在该URL末尾添加?wsdl,就可以获得WSDL。 - Shawn Grigson
我明白了。但是在获取到终结点之后,我该如何使用它呢?我可以像使用任何WCF webservice一样使用它吗?我的意思是添加服务引用并调用方法? - Ateik
2
你应该能够像使用其他任何Web服务一样使用它。ColdFusion Web服务旨在为开发人员提供“即插即用”的功能。您可能会遇到问题的地方是数据类型。在.NET中可用的数据类型数组可能不会在ColdFusion Web服务中表示。此外,无论它们在您的端点上转换成什么,都可能是一些较旧的、已弃用的数据类型,这取决于Web服务。我应该补充说:根据我的经验,大多数高级CF开发人员都不喜欢内置的SOAP功能,因为它将许多底层的连接抽象化,超出了我们的控制范围。 - Shawn Grigson
那对我没用,我添加了服务引用并创建了客户端,但我没有任何列出的操作。唯一有意义的可能是OpenAsync方法,但它不带任何参数。我该如何调用这些方法? - Ateik
@user836252 - 问题有点儿傻,但你试过调用这些方法了吗?我在使用VS2005进行测试时也遇到了类似的情况,但我仍然能够调用Web服务方法,即使它们没有出现在我期望的位置。例如:MyCFWebserviceTest test = new MyCFWebserviceTest(); String result = test.someFunction("john", "password"); - Leigh

7

我猜测你需要访问的方法叫做authorise,根据文档推断得出。因此,你需要按照以下方式调用Web服务:

https://services.example.com/ASP_SecureWebServices.cfc?method=authorise&site=xxx&login=xxx&password=xxx&partnerid=xxx&wstype=xpt_exhibitors

默认情况下,ColdFusion将返回一个WDDX数据包;如果你想要JSON格式,只需添加&returnformat=json即可。


1
检查WSDL以了解Web服务中公开的方法。

我尝试了几个操作,但是在Visual Studio中没有成功访问它们。 - Ateik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接