【问题标题】:Xamarin communication with SQL ServerXamarin 与 SQL Server 的通信
【发布时间】:2017-12-17 04:29:54
【问题描述】:

我正在制作一个项目,其中必须有 3 个必须连接到数据库的平台(ASP、桌面(Windows 窗体)和 Xamarin)。我一直在尝试,但似乎无法直接连接到数据库。 Sqlserver 只是在几秒钟后关闭连接。所以我尝试了webservice的方式。我无法添加服务引用。

我搜索了一下,似乎我必须:卸载 PCL 中的 Xamarin.Forms 块包,取消选中解决方案属性中的 Windows Phone,重新启动 VS 并重新安装块包。然后我就可以添加服务引用了。

然后它说我需要 Sytem.Web.Services 参考才能使其工作。但我无法添加它...

那么,毕竟,我怎么可能像这样连接到 SQL Server?在 ASP 和 Desktop 中它工作正常,我通过包含所有连接的类库直接连接。但我正在为这个问题摸不着头脑......

有什么想法吗?

【问题讨论】:

  • 启用CORS + Valet Key patternWebApi 层怎么样?
  • 理想情况下,您与数据库的所有通信都将通过一个 API。您的网站、桌面应用程序和移动应用程序都应该使用该 API。你甚至不一定需要CORS。只需为您的 API 编写一个 C# 客户端,即可在所有消费应用程序中重复使用。
  • 我该怎么做?我还没有制作任何 webAPI。我对编程比较陌生(我想你已经明白了,呵呵)。我和我的伙伴正在努力消耗一个(运动雷达),但我如何制作一个?我的意思是,我已经有一个与数据库通信的类库,但我猜你的意思是另一回事......你能给我一些指示吗?我参加了 xamarin 挑战,我们必须使用 Azure API。但我不想使用 azure...
  • 这与 Azure 无关。如果您想创建ASP.NET Web API,请阅读文档。您可以从 API 本身使用您的数据库类库。

标签: c# asp.net sql-server web-services xamarin


【解决方案1】:

当您有多个应用程序需要访问相同的数据时,您最好在它们之间放置一些它们都可以通信的东西。这减少了跨应用程序的重复逻辑数量,意味着您只需将数据库公开给单个服务。

                        Database
                           |
                           |
                           |
                          API
                          /|\
                         / | \
                        /  |  \
                       /   |   \
                      /    |    \
            Mobile---   Desktop  ---Website

如果您对所有内容都使用 .NET 堆栈,那么您的 API 可能会在 ASP.NET Web API 或 WCF 中实现。我推荐 Web API,因为它更简单。任何可以说 HTTP 的东西都可以与之对话。

然后,为了与您的 API 进行通信,您通常会围绕一个低级客户端创建一个包装器,以便与您的 API 端点进行通信。这通常采用包裹在 HttpClient 或 RestSharp 之类的类库的形式。此类库通过任何 .NET 应用程序都可以使用的 NuGet 包提供。

这是一些伪代码(不要指望它编译)

namespace MyClientAPI
{
    public class MyClient
    {
        private readonly string _baseAddress;

        public MyClient(string baseAddress)
        {
            _baseAddress = baseAddress;
        }

        public List<Customer> GetCustomers()
        {
            var restClient= new RestClient(_baseAddress);
            var request = new RestRequest("customers/all");
            var customers = restClient.Execute<List<Customer>>(request);
            return Customers;
        }
    }
}

【讨论】:

  • 嗨,我一直在阅读。我认为官方文档有点混乱。虽然,我已经完成了this 简单教程。这很简单,但可以帮助您了解基础知识。虽然,它告诉我的还不够。所以,现在我要关注this 系列的 youtube 视频。似乎他指定了一切。
  • 关于您的示例,在我看来,这就是我稍后在每个平台上必须做的,以便与我的 API 进行通信。我对吗?还是我必须看很多视频?哈哈。谢谢,顺便说一句。
  • @taiko 是的,您的每个应用程序都应该通过您创建的客户端与 Web API 进行通信。
  • 我至少可以通过 api 调用我的库,使其适用于 web 和桌面。但是在 xamarin 中,我们没有 Get/etc 操作所必需的 Sytem.Web.Http。以你的例子,关于 RestSharp,我看到我只能在 android 平台上安装 nugget。我该怎么做呢?我看过一个带有 jsonconvert.serializeobject 的例子,不过......
  • @taiko 你的 API 不应该依赖于使用 System.Web,因为它不是很便携。那是 ASP.NET 的核心,而 ASP.NET 并不是到处运行。选择与图书馆无关的东西。我不知道 Xamarin 支持的每个库,但由于这可能是最严格的平台,您应该首先找到一个可以在其上运行的库,然后确保它在其他平台上可用。对客户端进行一些思考,这样您就不必为每个平台重新实现不同的客户端。看起来像RestSharp is available for Xamarin
猜你喜欢
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多