我需要调用用.NET编写的Web服务.进行调用的应用程序是用ColdFusion编写的.Web服务期望的参数之一是DataSet对象.我无法在ColdFusion中实例化.NET DataSet对象,如何将Web服务传递给它?我在原始XML中编写SOAP请求没有问题,我只是不知道DataSet对象的XML是什么样的.
.NET期望的所有对象都由Axis序列化并且可供您使用.不幸的是,ColdFusion并不容易实现.
要获得存根,您必须:
使用coldfusion以任何方式访问WSDL.
在CF app目录中查找存根.它们位于"subs"目录中,由WSDL.like组织:c:\ ColdFusion8\stubs\WS\WS-21028249\com\foo\bar \
将"com"中的所有内容复制到CF类路径中存在的新目录中.或者你可以做一个像:c:\ ColdFusion8\MyStubs\com\foo\bar \
如果您创建了一个新目录,请将其添加到类路径中.并重新启动CF服务.
像任何其他java对象一样使用它们或者CreateObject()MyObj = CreateObject("java","com.foo.bar.MyObject");
您的数据集对象应该位于Axis决定应该使用的任何Java格式的某个位置.很可能你需要在cfscript中做几乎所有这些
编辑问题
SOAP对象将定义对象结构,Axis将创建用于操作它的方法.看一下轴创建的Java对象.请记住,您可以使用CFDUMP查看方法和属性.
现在我已经看到了Axis被混淆的.NET对象,比如变成"ArrayOfAnyType"的可怕的非泛型集合.对于.NET开发人员来说,在他们的服务中使用Generics是很重要的,这样Axis就可以正确地定义数组....如果他们不这样做那么它很糟糕,你可能无法用肥皂来处理它.
但是不要害怕被贬低......还有另一种方式.您始终可以使用XML/RPC类型的样式与.NET Web服务进行交互.它不是自动的,它很多手工解析XML,很糟糕,但有时它是唯一的方法.你应该能够通过在最后没有"?wsdl"的情况下点击.asmx文件从.NET获得一些帮助.如果你这样做,.NET将生成一堆文档以及调用和XML的样子.在这种情况下,您可以创建XML并通过使用cfhttp指定的线路传递它.祝好运!
PS我还应该注意,据我所知,没有办法将手动XML与ColdFusion/Apache Axis对象混合,也没有办法模拟自己的对象与CF/Axis一起使用...你必须使用存根或什么也没有