Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin与SQL Server的通信_C#_Asp.net_Sql Server_Web Services_Xamarin - Fatal编程技术网

C# Xamarin与SQL Server的通信

C# Xamarin与SQL Server的通信,c#,asp.net,sql-server,web-services,xamarin,C#,Asp.net,Sql Server,Web Services,Xamarin,我正在做一个项目,我必须有3个平台(ASP,桌面(windows窗体)和Xamarin),必须连接到数据库。我一直在试验,但似乎无法直接连接到数据库。Sqlserver只是在几秒钟后关闭连接。所以我尝试了Web服务的方式。我无法添加服务引用 我搜索了一下,似乎不得不:卸载PCL中的Xamarin.Forms nugget包,取消选中解决方案属性中的Windows Phone,重新启动VS并重新安装nugget包。然后我可以添加服务引用 但后来它说我需要Sytem.Web.Services参考,它

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

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

但后来它说我需要Sytem.Web.Services参考,它才能工作。但我不能添加它

那么,在所有这些之后,我怎么可能像这样连接到SQL Server呢?在ASP和Desktop中工作正常,我通过包含所有连接的类库直接连接。但这件事让我抓狂


有什么想法吗?

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

                        Database
                           |
                           |
                           |
                          API
                          /|\
                         / | \
                        /  |  \
                       /   |   \
                      /    |    \
            Mobile---   Desktop  ---Website
如果您对所有内容都使用.NET堆栈,那么您的API可能将在或WCF中实现。我推荐WebAPI,因为它更简单。任何能说HTTP的东西都能和它说话

然后,为了与您的API通信,您通常会在低级别客户机周围创建一个包装器,以简化与API端点的通信。这通常采取类库的形式,类库围绕着HttpClient或类似的东西。这个类库是通过任何.NET应用程序都可以使用的NuGet包提供的

下面是一些伪代码(不要期望它能够编译)

名称空间MyClientAPI
{
公共类MyClient
{
专用只读字符串\u基地址;
公共MyClient(字符串基地址)
{
_基地址=基地址;
}
公共列表GetCustomers()
{
var restClient=新的restClient(_baseAddress);
var请求=新的重新请求(“客户/所有”);
var customers=restClient.Execute(请求);
返回客户;
}
}
}

WebApiCORSenabled+
Valet-Key模式的
WebApi
层如何?理想情况下,您与数据库的所有通信都将通过单个API进行。您的网站、桌面应用程序和移动应用程序都应该使用该API。你甚至不需要CORS。只需为您的API编写一个C#客户机,就可以在所有消费应用程序中重用。我该怎么做?我还没有制作任何webAPI。我对编程比较陌生(我想你已经知道了,呵呵)。我和我的搭档正在努力消费一个(sportsradar),但我如何制作一个呢?我的意思是,我已经有了一个与数据库通信的类库,但我想你是说另一件事。。。你能给我一些指点吗?我参加了xamarin挑战赛,我们必须使用Azure API。但我不想使用azure…这与azure无关。如果你想做一个简单的决定,请阅读文档。您可以从API本身使用数据库类库。我认为官方文件有点混乱。不过,我已经完成了简单的教程。这很简单,但可以帮助您了解基本知识。虽然,这还不够告诉我。所以,现在我将关注youtube的一系列视频。关于你的例子,在我看来,这就是我以后在每个平台上与API通信所要做的。我说得对吗?还是我要看很多视频?哈哈。谢谢,顺便说一句。@taiko是的,您的每个应用程序都应该通过您创建的客户端与Web API进行通信。我让它工作了,至少在Web和桌面上,通过API调用我的库。但是在xamarin中,我们没有Sytem.Web.Http,这是Get/etc操作所必需的。以你的例子,关于RestSharp,我发现我只能在android平台上安装nugget。我该怎么做?我见过一个jsonconvert.serializeobject的例子,不过…@taiko您的API不应该依赖于使用System.Web,因为System.Web的可移植性不强。这是ASP.NET的核心,ASP.NET并不是到处运行的。选择一些图书馆不可知论的东西。我不知道Xamarin支持的每一个库,但因为这可能是限制性最强的平台,所以您应该首先找到一个在它上面工作的库,然后确保它在其他平台上可用。考虑一下客户端,这样就不必为每个平台重新实现不同的客户端。看起来像。
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;
        }
    }
}