ERR_NAME_NOT_RESOLVED 使用 SAPUI5 在 Android 上的 Cordova 应用程序中对 sap RFM 进行 ajax 调用时

ERR_NAME_NOT_RESOLVED when making ajax call to sap RFM in Cordova app on Android using SAPUI5

这是我的第一个问题,我对 sap 开发还很陌生,所以我希望我能把这个问题说清楚。

我正在尝试从 Android 应用程序调用 RFC。我在公司的 SAP 系统上创建了功能模块,然后将其公开为 SOAP Web 服务。然后我写了一个 sapui5 webapp,然后我把它做成一个 cordova 项目来部署它在 android 设备上。

为了调用 SOAP 服务,我在 MainView.controller.js:

中使用了这个 javascript 代码

$.ajax({
        HTTPHeaders: {
          "Access-Control-Allow-Origin" : "*",
          vary : origin
        },   
        url : "<soap address>", 
        type : "POST", 
        data : request,
        processData : false,
        crossDomain : true,
        cache : false,
        dataType : "text", //xml
        contentType : "text/xml; charset=\"utf-8\"",
        headers : {"Access-Control-Allow-Origin" : "*",
                   "Access-Control-Allow-Methods" : "GET,POST,OPTIONS, PUT, DELETE"},
        externalRequestName : 'ZTestRfc',
        SOAPaction : "urn:sap-com:document:sap:soap:functions:mc-style:zrfc_service:ZTestRfcRequest", 
        success : function(data, textStatus, jqXHR) {
               response = data;
               console.log('success');
               console.log(response);              
        },
        error: function(xhr, status)
        {
               console.log("ERROR");
               console.log(xhr);     
        },
        complete : function(xhr,status) {
               //things
        }
 })

当我 运行 它作为 Chrome 中的网络应用程序时, 禁用网络安全性 , ajax 调用工作正常,但是当我尝试在 Android 设备上 运行 它给我这个错误: jquery-dbg.js:10210 POST http::ERR_NAME_NOT_RESOLVED

我认为问题与 CORS 有关,因为当我尝试 运行 webapp 而不禁用 chrome 网络安全时,它确实告诉我 Access to XMLHttpRequest at from origin 已被 CORS 策略屏蔽,但到目前为止我还没有找到修复它的方法。

我的 index.html 的 head 标签中有这个:

<meta http-equiv="Content-Security-Policy" content="default-src *; script-src * 'unsafe-inline'; style-src * 'unsafe-inline'; media-src *; img-src * data:">

这是我的 config.xml 文件(我知道有些行是多余的):

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.innorg.provarfcajax" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>BarcodeScannerPrototype</name>
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="dev@cordova.apache.org" href="http://cordova.io">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="<sap system domain>"/>
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <platform name="android">
        <allow-intent href="market:*" />
        <access origin="*" subdomains="true"/>
        <access origin="<sap system domain>/" subdomains="true"/>
        <allow-navigation href="*" />
        <allow-navigation href="<sap system domain>/" />
        <allow-navigation href="<soap url>" />
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
    </platform>
</widget>

我安装了 cordova 白名单插件并在我的 android.manifest.xml

中安装了这一行
 <uses-permission android:name="android.permission.INTERNET" />

有人知道如何在 Android 上进行 RFC 调用吗? 我知道可能有一种更简单的方法可以从 Android 调用 SAP 远程函数,但我是 SAP、SAPUI5 和 Android 开发的新手,所以我基本上把我在网上找到的东西放在一起并结束了有了这个。我必须使用 RFC 来连接 SAP 系统,因为我正在使用的系统太旧了,而且上面没有 NetWeaver Gateway。如果您知道更简单的方法,请告诉我并提供示例。

如果您需要任何额外的信息,请告诉我,我会尽力提供。

编辑:也许这已经很明显了,但我的 SOAP url 是那种“http://system domain:8000/service address”

所以显然部分问题是 url 我曾经调用该服务:虽然我更新了笔记本电脑上的主机文件以使其指向正确的 IP 地址,但我没有在我尝试将应用程序部署到的 Android 设备上完成了任何此类操作,这就解释了 ERR_NAME_NOT_RESOLVED 错误。将 IP 直接放在 URL 中代替系统域修复它并且 Android 应用程序运行得很好。

但是我还没有找到解决网络版应用程序 CORS 问题的方法。