我几乎在那里... PhoneGap Android连接到WCF服务

时间:2012-06-21 13:57:16

标签: android wcf jquery cordova jsonp

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

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

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

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

仅使用Html5 / jQuery的第二个Web应用程序在IIS Express中托管在另一个端口上。

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

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

更多细节:

我有.Net接收和开发的WCF REST服务。发送JSON和JSON-P。

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

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

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

我已将[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]

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

[access origin =“*”]

在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应用程序但是如果我无法拨打网络服务就无法继续。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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

您说您正在使用JQuery查询您的Web服务,如果您可以打开在正常浏览器窗口中触发请求的html文件,并且一切正常。问题不在于代码,而是使用您正在使用的仿真器,也许有些错过配置idk。

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

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

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