【问题标题】:Default Azure Mobile App backend returning 500默认 Azure 移动应用后端返回 500
【发布时间】:2017-02-09 00:18:05
【问题描述】:

我正在尝试使用 Azure 移动应用和 Azure 存储为我的 Xamarin.Forms 应用构建后端。我在 Azure 中创建了所有内容(移动服务、存储帐户、ConnectionString 等),并下载了后端(因为我选择 C# 作为语言)和 Xamarin.Forms 应用程序的默认项目。

然后我在本地调试了后端的项目并且正在工作,所以我发布了它。当我使用默认的 Xamarin.Forms 应用程序测试 Web API 时,服务器返回了一个异常(500 内部服务器异常),并显示消息“发生错误。”。之后我尝试启用服务器日志、远程调试和 xml 日志文件,但没有找到太多。

远程调试显示“可见”后端代码没有任何问题(调试时未引发异常)。 xml 日志文件在 OWIN 方法中显示警告,但没有错误。 服务器日志显示 GET 请求中有两个错误: azure-log.txt
观察。我删除了我的应用服务名称并替换为“{servicename}”。

我已经尝试删除并重新创建所有 Azure 服务,已经尝试从 http 更改为 https 并尝试将 connectionString 更改为其他值。但我只是在尝试调试默认项目但没有成功后才进行这些更改。

我正在尝试解决此错误一段时间,但我不知道我还能做些什么。
感谢您的帮助!

【问题讨论】:

    标签: c# azure azure-mobile-services


    【解决方案1】:

    Exception=System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。 验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口,错误:52 - 无法找到本地数据库运行时安装验证 SQL Server Express 是否已正确安装以及本地数据库运行时功能是否正确已启用。)---> System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection

    根据您提供的错误,我假设您在 Azure 移动后端使用本地数据库。您可以利用KUDUAzure App Service Editor 来检查您的web.config 文件下的MS_TableConnectionString 连接字符串。连接字符串如下所示:

    <add name="MS_TableConnectionString" connectionString="Server=tcp:{your_dbservername}.database.windows.net,1433;Initial Catalog={your_dbname};Persist Security Info=False;User ID={your_username};Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>

    当通过 Visual Studio 将您的移动应用程序部署到 Azure 时,您需要将连接字符串指向您的 Azure 数据库,如下所示:

    有关创建移动应用并将其部署到 Azure 应用服务的更多详细信息,您可以参考此document。此外,您可以利用 Web 应用刀片下的“所有设置 > 应用程序设置”来配置连接字符串,这可能会在运行时覆盖 web.config 文件中的现有连接字符串。更多详情可以关注官方tutorial

    此外,您可以关注Adrian Hall 的书here,以更好地了解和快速入门 Azure 移动应用。

    【讨论】:

    • 我知道当你在 Azure Portal 上获得你的快速启动项目时,你可以创建一个数据库并选择 Azure Storage 的类型。但正如我所知,Azure 移动服务器后端利用 SQL db 将数据存储在您的后端。您可以在 web.config 文件中找到一个名为 MS_TableConnectionString 的连接字符串,该文件使用本地 sql db 来存储您的数据。
    • 此外,Azure 移动应用利用 TableController 可以通过使用 EF 数据上下文、离线同步等对表提供内置 CURD 操作。
    • 如果您不想创建 Azure sql 数据库,您可以利用 SQL Server Compact database,它可以与您的项目一起部署到 Azure 移动应用程序。
    • 不要使用这些说明 - 它们适用于移动服务 - 而不是移动应用程序。我在我的书中介绍了使用 Azure 存储而不是 SQL Azure - aka.ms/zumobook - 第 3 章。
    • 对不起,我对 Azure 移动应用的误导。您提供的错误表明您也在尝试连接 Azure 端的 sql db 数据存储。您是否尝试再次检查 tutorial 以配置 Azure 移动服务快速入门项目以使用 Azure 表存储?如需进一步指导,请遵循 Adrian Hall 的书。或者您可以提供一个示例项目让我们重现此问题。
    【解决方案2】:

    发生错误是因为 Azure 为后端创建的默认项目旨在与 SQL 一起使用。由于我使用 Azure Storage 作为数据库,因此我不得不修改这个项目。

    Adrian Hall 的书 (NoSQL Storage with the StorageDomainManager) 的第 3 章准确地解释了如何做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 2013-09-07
      相关资源
      最近更新 更多