我和FSharp.Data.SqlClient有个问题。我正在构建一个Asp.net核心完整框架4.6Web应用程序。主要项目是在C#中,它引用了F#中的几个项目。这些F#项目中的每一个都使用FSharp.Data.SqlClient进行数据访问。当在本地运行应用程序时,一切都正常,但是当我将它部署到azure时,当F#代码试图执行查询时,我会得到错误“实例失败”。
我怀疑这在某种程度上与连接字符串的使用方式有关,或者可能与FSharp.Data.SqlClient和实体框架之间的某种运行时冲突有关。实体框架主要用于处理成员数据,而不是其他任何东西。我必须具体地向主项目中的配置文件中添加一个连接字符串,以便引用的F#项目能够在运行时访问数据库。实体框架通过AppSettings.Json文件使用它的数据字符串。我不知道是否有更好的方法将其连接起来,但同样,当我在本地运行它,而不是在它被部署到的服务器上运行时,它是完美的。
有什么东西,我需要启用或改变代码明智的应用程序工作在生产服务器?
这里是我的数据字符串的视图。在我的F#项目中,我有一个app.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data
Source=server code here"
providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
</startup>
</configuration>在同一个F#项目中,我有另一个用于访问运行时连接字符串的文件:
module internal DbAdmin
open FSharp.Data
open FSharp.Configuration
module Admin =
// runtime connection string
type private Config = AppSettings<"App.config">
let rtConnection = Config.ConnectionStrings.DefaultConnection在主C#项目中,我有一个app.config文件:
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=server
code here" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>在appsettings.json中,配置如下:
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=Server code Here"
}
}这是实际的查询代码:
type Select_AllArticles =
SqlCommandProvider<
"
select * from article.vw_AllArticlesAndDetails
", Admin.connectionString, ConfigFile = Admin.configFile
>
try
succeedWithMsg
(Select.Select_AllArticles.Create(Admin.rtConnection).Execute() |>
Seq.toList)
(createGoodMsg(OK("Some Success Message.")))
with
| ex -> fail (createBadMsg(DbError(ex.Message + " --selectAllArticles")))**更新:**在远程调试应用程序之后,这是它给出的全部错误消息
在建立到Server的连接时发生了与网络相关的或特定于实例的错误.找不到或无法访问服务器。验证实例名是否正确,以及Server是否配置为允许远程连接。(提供程序: SQL网络接口,错误: 26 -指定的服务器/实例定位错误)
这对我来说很奇怪,因为使用中的连接字符串与实体框架使用的连接字符串相同,它似乎可以很好地访问数据库。
新更新好吧,我想我搞清楚了到底是怎么回事。我相信这绝对是一个配置问题。因此,正如我前面所说的,在开发过程中,我必须创建一个配置文件,以便创建一个FSharp.Data.SqlClient可以连接到的连接字符串。我不知道如何让它连接到appsettings.json文件中的连接字符串。也许有人可以向我解释,因为这可能是最好的解决办法。无论如何,我的假设是配置文件中的连接字符串在部署时不会更新,方法是手动插入生产服务器连接字符串,然后部署应用程序。果然,这个问题已经解决了,一切正常运转。那么,现在的问题是,在利用FSharp.Data.SqlClient文件的核心应用程序中,使appsettings.json正确连接到连接字符串的最佳方法是什么?我该如何处理这个问题?我需要有人陪我走过,因为我是新手。
当前状态
因此,在意识到这确实是一个配置问题之后,现在的问题是如何通过我的appsettings.json项目正确地从F#文件中检索连接设置。使用FSharp.Data json提供程序,我需要弄清楚如何正确定位生产和开发使用的appsettings.json文件。F#项目如何在主项目中定位文件?我是不是把事情搞得太复杂了?
发布于 2017-07-16 19:26:17
您似乎在寻找App.config来查找连接字符串。在部署时,通常会用不同的.dll.config文件替换它,尽管这似乎不是问题所在。您的Azure连接字符串中有不正确的DefaultConnection吗?除此之外,我建议解析来自appsettings.json而不是app.config文件的连接字符串。
https://stackoverflow.com/questions/45122650
复制相似问题