【问题标题】:I am almost there...PhoneGap Android connect to WCF Service我快到了...PhoneGap Android 连接到 WCF 服务
【发布时间】: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


【解决方案1】:

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

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

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

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

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

所以当你改为指向另一个 IIS 实例时,它又开始工作了。

【讨论】:

  • 感谢伙伴的帮助。是的,应该知道这很简单。你说的对。我在 IIS 上使用不同的实例和端口来模拟整个跨域问题。想确保我在进入生产环境之前让它工作。很高兴我终于让它在 phonegap 中工作。仅连接到本地 IIS 上的端口 80(不是 express)。学到了新的东西,这总是好的。再一次,谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多