【发布时间】:2012-06-23 18:49:43
【问题描述】:
首先,我要感谢 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 服务。我现在没有真正的安卓设备来测试程序,因此我必须使用模拟器。
更多细节:
我有一个在 .Net 中开发的 WCF REST 服务,以 JSON 和 JSON-P 接收和发送。
我已经在另一个端口上使用第二个 Web 应用程序对此进行了测试,以确保允许跨域调用。
我还使用了 Firefox 的 RESTclient 插件,并且可以使用它成功地进行 JSON 和 JSON-P 调用。 [http://restclient.net/] 所以我确信 WCF 服务正在正常工作。应该不存在跨域问题。
当我使用我知道在 Visual Studio 中工作的 jQuery 获取 Html 文件时,将其复制到 phonegap 应用程序中,我尝试对我的 WCF 服务器进行基本调用,但我无法连接到服务器。
我已将 URL 从 [http://localhost:50425/LoginService.svc/GetData] 更改为 [http://10.0.2.2:50425/LoginService.svc/GetData] 根据android文档:[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 服务,就无法继续。
任何建议将不胜感激。
【问题讨论】:
-
我开发了一个使用 RESTful WebService 的 PhoneGap 应用程序。您应该使用浏览器单步执行您的 js 代码,firefox w/firebug 或 chrome。如果这行得通,那么模拟器进行调用可能会出现一些问题。也许一些设置?
-
您好furier,谢谢您的回复。我同意它必须是模拟器内的设置,因为应用程序本身与 Visual Studio 内的 jsonp 回调一起使用。只是想证明我可以从 phonegap 中的网络服务器获取数据,这样我就可以继续开发......
-
好吧,我的猜测是您使用 JQuery 来查询 Web 服务,因此您实际上并没有为此目的使用 PhoneGap。那么它至少不是PhoneGap js问题,如果它可能是PhoneGap包装器项目或模拟器中的某些设置,我想知道,但其中之一是我的猜测。
-
感谢您的建议!好的,看来我发现了问题。你说的对。它不是Phonegap 或jQuery。事实上,模拟器不会连接到我的 IIS Express,而是连接到本地机器上安装的 IIS。将 url 更改为指向 iis 并收到我的 jquery ajax 调用并返回 jsonp 数据。不知道为什么它(模拟器)不会连接到 iis express。非常感谢您花时间帮助解决我的问题。非常感谢。
标签: android wcf jquery cordova jsonp