如何从 Android 连接到 Azure 上的 MongoDB?

Posted

技术标签:

【中文标题】如何从 Android 连接到 Azure 上的 MongoDB?【英文标题】:How to connect to MongoDB on Azure, from Android? 【发布时间】:2013-12-24 09:14:06 【问题描述】:

是否有人详细说明如何将 android 应用程序连接到在 Azure 角色上运行的 MongoDB?

--

您好,我在云服务中的多个 Azure 角色上运行了 MongoDB 副本集。我已使用mongo-azure library on GitHub 创建角色实例并让它们在 Azure 中运行。

大多数在线文章似乎只谈论在本地(通过 localhost)连接到 Azure-MongoDB。但是,由于我的应用程序不会在本地运行到 Azure,我觉得我必须使用 REST 以某种方式连接到 Azure 云服务器,这可能会也可能不会将数据传播到 MongoDB 副本集。

谁有更多关于如何将 Android 应用程序连接到在 Azure 角色上运行的 MongoDB 的详细信息?

(或者,对于那些没有 Android/Java 经验的人:如何使用非 .NET 从非本地主机连接?)

ps - 在其他 MongoDB 问题中,人们已经回答了 Android 不是 MongoDB 原生支持的,我可以使用非原生方法。有些应用程序已经这样做了,主要是Foursquare。不幸的是,他们使用 AWS 而不是 Azure(我的要求)。

pps - 如果有人对链接的 mongo-library 有更多关于它如何工作的更详细的资源,那么这也将非常有帮助。

更新

我找到了最新版本的 mongo-java-driver.jar(当前为 2.11.3)并正在对其进行测试。 感谢another question,我发现Java 驱动程序不支持Android 的特定issue,但该问题似乎已解决。

可能的解决方案

在 Visual Studio 项目中,我为角色创建了一个输入端点。到目前为止,这似乎可以解决问题,使用MongoClient mongo = new MongoClient("<my_ip_address>", 27017);

【问题讨论】:

看来我是第一个在 SO 上遇到这些 MongoDB/Azure/Android 问题的人,所以如果您有兴趣,我将创建一系列问题(并希望得到答案):@ 987654326@ 【参考方案1】:

在我看来,您的“可能的解决方案”是正确的——您需要在围绕您的角色的防火墙中打开一个(负载平衡的)TCP 端口,而InputEndpoint 就是这样做的方法。

【讨论】:

是的,经过更多测试,我确定此解决方案适用于远程连接。但是,对于未来的读者,只要知道这会为访问数据库打开一个安全漏洞。【参考方案2】:

如果您是上述 github 解决方案,则在使用大小 > 1 的副本集时进行写入时,您不能使用输入端点。您不希望 Azure 负载均衡器将写入(插入或更新)路由到 MongoDB 的辅助节点,在这种情况下您的写入将失败。 如果您使用 Azure 虚拟机,那么您可以为每个虚拟机实例创建一个端口映射并克服这个问题。

【讨论】:

您是正确的,使用InputEndpoint 的副本集大小> 1 时写入将失败。为了使这项工作与工作角色一起工作,需要使用InstanceInput。 See this question for more details

以上是关于如何从 Android 连接到 Azure 上的 MongoDB?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用代理从 Cosmos SDK .Net 连接到 Azure Cosmos?

如何将 *** 站点连接到 Azure vWAN 上的 vHub?

azure ubuntu 16.04 VM 无法连接到 azure 上的数据库

Xamarin Android 使用 Asp.Net core web api 连接到 Azure Notification Hub [关闭]

如何使用 JetBrains DataGrip 连接到远程 Microsoft Azure 数据库

如何从不同网络上的android连接到本地apache服务器?(端口转发)