1

首先,我要感谢 stackoverflow 上的所有专家,通过阅读提出的问题并查看示例代码并阅读我能够得到的答案。再一次感谢你!

我一直在花费数小时寻找解决方案,我已经阅读了很多关于这个问题的帖子。似乎这是很多其他人正在/一直在努力解决的问题。如果有人可以帮助解决这个令人沮丧的问题,我将非常感谢任何更多的建议或提示。

我所有的开发都是在我的本地机器上完成的。(Win 7,Visual Studio 11beta)

WCF 服务在其自己的端口或 IIS 7.5 (.Net Framework 4.0) 上托管在 IIS Express 中

仅具有 Html5/jQuery 的第二个 Web 应用程序托管在不同端口上的 IIS Express 中。

在我的本地机器上也使用带有 Android SDK 17 的 Eclipse 3.7.2。它似乎所有的软件都运行正常。Android Emulator 正在运行,Phonegap/Cordova 库已安装等。我正在使用带有 Cordova 1.6.0 的 Android 4.0.3

我正在寻求帮助以找出为什么我的 phonegap 模拟器 ajax 调用不会通过我的 WCF REST 服务。我现在没有实际的 android 设备来测试程序,因此我必须使用模拟器。

更多细节:

我有一个在.Net 中开发的 WCF REST 服务,以 JSON 和 JSON-P 接收和发送。

我已经在另一个端口上使用第二个 Web 应用程序对此进行了测试,以确保允许跨域调用。

我还使用了 Firefox 的 RESTclient 插件,并且可以使用它成功地进行 JSON 和 JSON-P 调用。[ http://restclient.net/ ] 所以我确信 WCF 服务正在正常工作。不应该有任何跨域问题。

当我使用我知道在 Visual Studio 中工作的 jQuery 获取 Html 文件时,将其复制到 phonegap 应用程序中,我尝试对我的 WCF 服务器进行基本调用,但我无法连接到服务器。

根据android文档,我已将URL从[http://localhost:50425/LoginService.svc/GetData]更改为[http://10.0.2.2:50425/LoginService.svc/GetData]:[http://developer .android.com/guide/developing/devices/emulator.html#networkaddresses]

我使用以下设置创建了一个允许所有白名单:

[访问来源=“*”]

在 cordova.xml 文件中。请参阅:[http://professionalaspnet.com/archive/2012/05/15/Whitelisting-Domains-in-Cordova-_2800_PhoneGap_2900_-Android.aspx]

根据 [http://docs.phonegap.com/en/1.8.1/guide_getting-started_android_index.md.html#Getting%20Started%20with%20Android] 在 AndroidManifest.xml 文件中设置了正确的权限

当我发起呼叫时,我使用 $.ajaxSetup 错误函数来捕获网络错误等,并显示警告错误消息。使用 console.log() 确保它通过这个函数没有错误。

当调用实际发生时,我收到“错误请求 - 主机名无效。HTTP 400。请求主机名无效。”

如果调用成功,我会在 Visual Studio 中使用断点来确定调用是否已完成并查看请求是否通过。

如果我可以访问“外部”主机,还有其他方法可以从模拟器进行测试吗?在这种情况下,要确保模拟器实际上可以找到服务?是否有任何工具或其他配置设置需要完成?

我什至删除了我的模拟器并创建了一个新模拟器,但它仍然无法连接到 WCF 服务。

我真的很想这样做,想构建一个完整的 phonegap 应用程序,但如果我无法调用 Web 服务,则无法继续。

任何建议将不胜感激。

4

1 回答 1

0

PhoneGap 实际上只是 html/css/js 网页的包装器,带有一个用于访问手机特定功能的 js 库,可以编译为多个原生移动平台应用程序。

所以这真的不是PhoneGap问题......

您说您正在使用 JQuery 查询您的 Web 服务,如果您可以在普通浏览器窗口中打开触发请求的 html 文件,并且一切正常。问题不在于代码,而在于您正在使用的模拟器,可能是一些未配置的 idk。

好的,如果仍然失败,您很可能指向错误/没有 IIS 实例。如果您有两个 IIS 实例在端口 80 上运行,那么它的行为会如何,但我认为这不会很好,我的猜测是其中一个会覆盖另一个。

因此,如果您在 IIS 1 上托管您的 Web 服务,但 IIS 2 覆盖 IIS 1,那么您将永远无法访问该 Web 服务,并得到您得到的错误。

因此,当您更改为指向另一个 IIS 实例时,它又开始工作了。

于 2012-06-22T12:20:47.780 回答