【发布时间】:2014-07-02 10:29:33
【问题描述】:
我正在尝试通过 HTTP 适配器进行非常简单的 Web 服务调用,但失败了。我一定错过了一些非常简单的东西。
我想使用这个示例服务:
http://www.webservicex.net/geoipservice.asmx 我在上述服务的 WSDL 上使用 Worklight 的“发现后端服务”工具来生成 HTTP 适配器代码。我部署适配器,然后右键单击 - 运行方式 - 调用 Worklight 过程。在参数区域,我输入(带引号):
“173.194.34.178”
最初,我收到关于 HTTP 标头中没有 SOAPAction 的错误,因此我对 Adapter -impl.js 进行了编辑以手动添加 SOAPAction:
function invokeWebService(body, headers){
var soapActionHeader = '"http://www.webservicex.net/GetGeoIP"';
var input = {
method : 'post',
returnedContentType : 'xml',
path : '/geoipservice.asmx',
headers : {'soapAction' : soapActionHeader},
body: {
content : body.toString(),
contentType : 'text/xml; charset=utf-8'
}
};
//Adding custom HTTP headers if they were provided as parameter to the procedure call
headers && (input['headers'] = headers);
return WL.Server.invokeHttp(input);
}
这解决了 SOAPAction 问题,但再次使用 Invoke Worklight Procedure 会导致:
"faultstring": "System.Web.Services.Protocols.SoapException:服务器无法处理请求。---> System.ArgumentNullException:值不能为空。\n参数名称:在 System.Text 处输入\n。 RegularExpressions.Regex.IsMatch(String input)\n at WebserviceX.Service.Adapter.IPAdapter.CheckIP(String IP)\n at WebserviceX.Service.GeoIPService.GetGeoIP(String IPAddress)\n --- 内部异常堆栈跟踪结束---"
几乎就像 IP 地址实际上并没有在出站消息中结束。
我是否在“调用 Worklight 过程”对话框中正确输入了参数?这是对话框图像的链接:
https://picasaweb.google.com/lh/photo/t_BpwCVgPmiSpgKld5kMOtMTjNZETYmyPJy0liipFm0?feat=directlink
【问题讨论】:
-
看看你的其他问题的回答是否对这种情况也有帮助:stackoverflow.com/a/24530329/1276624
-
非常感谢 - 它确实有助于构建 JSON。我可以问一些与服务属性对话框相关的问题吗?当我使用 Discover Back End Services 工具时,它会生成适配器并给它一个通用名称 - SoapAdapter1。它还将条目放入服务节点。我将适配器重命名为更合适的名称,但服务属性对话框的适配器名称仍为 SoapAdapter1。不是一点问题,但是每次我进行构建时,它都会重新创建一个名为 SoapAdapter1 的新适配器,除非我删除了服务条目。我可以在某个地方更改它吗?
-
目前无法为生成的适配器生成唯一名称。从阅读编辑后的问题来看,这似乎已经解决了——您介意将您的解决方案写成问题的答案吗?
标签: ibm-mobilefirst worklight-adapters