Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ibm mobilefirst Worklight HTTP适配器-简单Web服务示例问题_Ibm Mobilefirst_Worklight Adapters - Fatal编程技术网

Ibm mobilefirst Worklight HTTP适配器-简单Web服务示例问题

Ibm mobilefirst Worklight HTTP适配器-简单Web服务示例问题,ibm-mobilefirst,worklight-adapters,Ibm Mobilefirst,Worklight Adapters,我试图通过HTTP适配器获得一个非常简单的Web服务调用,但失败了。我一定错过了一些非常简单的东西 我想使用此示例服务: 我在上述服务的WSDL上使用Worklight的“发现后端服务”工具来生成HTTP适配器代码。我部署适配器,然后右键单击-runas-Invoke Worklight过程。在参数区域中,我输入(带引号): “173.194.34.178” 最初,我收到一个关于HTTP头中没有SOAPAction的错误,因此我对适配器-impl.js进行了编辑,以手动添加SOAPAction

我试图通过HTTP适配器获得一个非常简单的Web服务调用,但失败了。我一定错过了一些非常简单的东西

我想使用此示例服务:

我在上述服务的WSDL上使用Worklight的“发现后端服务”工具来生成HTTP适配器代码。我部署适配器,然后右键单击-runas-Invoke Worklight过程。在参数区域中,我输入(带引号):

“173.194.34.178”

最初,我收到一个关于HTTP头中没有SOAPAction的错误,因此我对适配器-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过程会导致:

“faultstring”:“System.Web.Services.Protocols.SoapException:服务器无法处理请求。-->System.ArgumentNullException:值不能为空。\n参数名称:System.Text.RegularExpressions.Regex.IsMatch(字符串输入)\n位于WebserviceX.Service.Adapter.IPAdapter.CheckIP(字符串IP)\n位于WebserviceX.Service.GeoIPService.GetGeoIP(字符串IPAddress)\n---内部异常堆栈跟踪的结尾--“

几乎就像IP地址实际上并没有在出站消息中结束一样

在“调用Worklight过程”对话框中输入的参数是否正确?以下是指向对话框图像的链接:


在遵循这里和我的另一个线程中的一些建议后,我开始研究正在生成的SOAP。我将WSDL填充到soapUI中,下面是一些确实有效的SOAP:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webservicex.net/">
   <soapenv:Header/>
   <soapenv:Body>
      <web:GetGeoIP>
         <web:IPAddress>173.194.34.178</web:IPAddress>
      </web:GetGeoIP>
   </soapenv:Body>
</soapenv:Envelope>
我向适配器添加了一些日志记录,并对名称空间定义进行了关键性更改:

soapEnvNS = 'http://www.w3.org/2003/05/soap-envelope';
var request = buildBody(params, 'xmlns="http://www.webservicex.net/"', soapEnvNS);

WL.Logger.debug(request);    

return invokeWebService(request, headers);
…它现在生成的soap如下所示:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <GetGeoIP xmlns="http://www.webservicex.net/">
      <IPAddress>173.194.34.178</IPAddress>
    </GetGeoIP>
  </soap:Body>
</soap:Envelope>

173.194.34.178

这对服务来说已经足够好了,我得到了很好的回应

看看对你的其他问题的回答在这种情况下是否也有帮助:非常感谢——这对构建JSON确实有很大帮助。我可以问一些与服务属性对话框相关的问题吗?当我使用Discover Back End Services工具时,它生成了适配器并给它起了一个通用名——SoapAdapter1。它还将条目放入服务节点。我将适配器重命名为更合适的名称,但“服务属性”对话框的适配器名称仍然为SoapAdapter1。一点问题都没有,但每次我进行构建时,它都会重新创建一个名为SoapAdapter1的新适配器,除非我删除服务条目。我可以在某个地方更改它吗?为生成的适配器生成唯一名称的功能目前不可用。通过阅读编辑后的问题,这似乎已经解决了-您介意写下您的解决方案作为问题的答案吗?
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <GetGeoIP xmlns="http://www.webservicex.net/">
      <IPAddress>173.194.34.178</IPAddress>
    </GetGeoIP>
  </soap:Body>
</soap:Envelope>