Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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# 最佳实践:将WPF连接到远程SQL数据库_C#_Mysql_Wpf_Wcf_Server - Fatal编程技术网

C# 最佳实践:将WPF连接到远程SQL数据库

C# 最佳实践:将WPF连接到远程SQL数据库,c#,mysql,wpf,wcf,server,C#,Mysql,Wpf,Wcf,Server,我知道关于这个话题有很多问题,但是经过四天的阅读和谷歌搜索,我有点卡住了,需要有人帮我澄清一些事情 我的处境: 我在C#中开发了一个WPF应用程序。 此应用程序需要连接到数据库,因为它存储用户帐户数据和其他数据。到目前为止,我已经在VisualStudio环境中使用了一个本地数据库,通过设置数据源并使用Fluent NHibernate进行映射和会话。 现在我想通过ClickOnce将应用程序分发给用户,所以我需要从本地数据库切换到在线数据库 我有一个Web服务器(Debian 8 Jessie

我知道关于这个话题有很多问题,但是经过四天的阅读和谷歌搜索,我有点卡住了,需要有人帮我澄清一些事情

我的处境:

我在C#中开发了一个WPF应用程序。 此应用程序需要连接到数据库,因为它存储用户帐户数据和其他数据。到目前为止,我已经在VisualStudio环境中使用了一个本地数据库,通过设置数据源并使用Fluent NHibernate进行映射和会话。 现在我想通过ClickOnce将应用程序分发给用户,所以我需要从本地数据库切换到在线数据库

我有一个Web服务器(Debian 8 Jessie 64位,内核版本3.16.0-4-amd64(SMP)),可以通过SSH访问和访问I-MSCP 1.3.16平台来管理服务器。我在服务器的一个域和一个sql用户中创建了一个数据库,我可以访问phpmyadmin。 我已经按照步骤为任何IP授予远程访问权限,例如SANDHYALAL KUMAR所述。 第一个问题:如何检查远程访问是否已成功授予。因为在执行
mysql>时,使用GRANT选项将**上的所有权限授予由“密码”标识的“用户名”@“%”我得到
0行受Putty控制台影响。

第二个也是更重要的问题:现在如何将WPF连接到服务器。 我已经读到,我不应该直接连接到服务器,因为密码安全和数据库安全,如下所示:

            ISessionFactory sessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2012
              .ConnectionString(c => c
                  .Server("SSS")
                  .Database("DDD")
                  .Username("UUU")
                  .Password("PPP")
                  ).ShowSql()
            )
            .Mappings(m =>
                      m.FluentMappings
                          .AddFromAssemblyOf<User>())
            .ExposeConfiguration(cfg => new SchemaExport(cfg)
             .Create(false, false))
            .BuildSessionFactory();
        return sessionFactory.OpenSession();
ISessionFactory sessionFactory=fluntly.Configure()
.数据库(MsSqlConfiguration.MsSql2012
.ConnectionString(c=>c
.Server(“SSS”)
.数据库(“DDD”)
.用户名(“UUU”)
.密码(“PPP”)
).ShowSql()
)
.Mappings(m=>
m、 FluentMappings
.AddFromAssemblyOf())
.ExposeConfiguration(cfg=>newschemaexport(cfg)
.Create(false,false))
.BuildSessionFactory();
返回sessionFactory.OpenSession();
然而,我不认为上述解决方案对我有效,因为我没有在线MSSQL服务器,对吗?还是需要配置现有服务器


是否有特定的层或API解决了我的问题。WCF、REST或ADO.Net对我来说是一个解决方案吗?我真的被所有这些不同的名称所困扰,因此我非常感谢您对我的两个问题的解释和建议。

您的案例与我的案例几乎相同。 我的应用程序也是WPF(clickonce)并连接到Microsoft Azure云SQL Server。 我也挣扎了好几天,因为你知道,安全总是最重要的

将密码放入桌面应用程序和分发意味着向黑客提供密码。如您所评论的,使用WCF设置一个层,并使WCF保存非对称(如RSA)编码的密码。然后,服务器将仅使用非对称密钥对用户进行身份验证以进行解密。此私钥仅存在于服务器中

回答第一个问题)您可以编写一个SELECT查询来确认哪些登录、用户具有这些角色、是否允许访问。 我相信互联网上有很多有用的例子


希望这有助于您的理解。

只是想澄清一下。。。您想分发WPF桌面应用程序。。。它连接到一个在线数据库。。。同时保护连接字符串?是的,这不常见吗?我的意思是,每个应用程序都以某种方式连接到数据库,不是吗?关于安全性,我认为WPF和数据库之间的一层可以解决这个问题。事实上,如果这是您的场景,那么您需要公开一个API(最简单的方法是使用WebApi项目),您的客户端将连接到该API。API将安全地与数据库通信。因此:客户端-->API-->数据库感谢您的澄清,您能推荐一个特定的webAPI或框架来设置这样的API吗?您知道WCF是否适合我描述的服务器吗?我没有SQL Server,我在debian服务器上运行mysql数据库。我听说WCF很难建立。我没有web服务方面的经验。那么,WCF是否适合“只是”建立连接呢?现在东亚的早晨已经到了。我发现Debian服务器+MySQL案例在我们国家也很常见。您的服务器将具有IP地址(或域),您的WPF应用程序将通过WCF之类的通信代理进行连接。我不知道内部服务器,因为我使用的是云服务器,但你们可以在互联网上找到许多WCF+MySQL文章和问题。作为名称WCF(Window Communication Foundation),它针对通信进行了优化,与您的知识水平相比,设置起来并不困难。创建WCF很简单,也可以很小,但您希望与服务器通信的SQL命令越多,WCF中需要的合同、接口和代码就越多。所有的条款,如合同、合同,你可能不熟悉,但一旦学会了,它们将一文不值。然而,对我来说,最困难的是理解安全性。花了几个月的时间才完成。一开始,我甚至不确定这种架构是否可用。WCF本身并不难。正如你所知,安全是一扇你必须通过的门,这可能需要时间。非常感谢你提供的详细信息。我将进入WCF,在工作日或工作周出现错误方向,然后出现任何兼容性问题或类似问题之前,知道这是正确的方法是很好的。顺便说一句,我的服务器也是云服务器。安全始终是一个障碍,但很重要。