首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FSharp.Data.SqlCient在本地工作,但不在生产服务器上工作。

FSharp.Data.SqlCient在本地工作,但不在生产服务器上工作。
EN

Stack Overflow用户
提问于 2017-07-15 20:54:08
回答 1查看 248关注 0票数 1

我和FSharp.Data.SqlClient有个问题。我正在构建一个Asp.net核心完整框架4.6Web应用程序。主要项目是在C#中,它引用了F#中的几个项目。这些F#项目中的每一个都使用FSharp.Data.SqlClient进行数据访问。当在本地运行应用程序时,一切都正常,但是当我将它部署到azure时,当F#代码试图执行查询时,我会得到错误“实例失败”。

我怀疑这在某种程度上与连接字符串的使用方式有关,或者可能与FSharp.Data.SqlClient和实体框架之间的某种运行时冲突有关。实体框架主要用于处理成员数据,而不是其他任何东西。我必须具体地向主项目中的配置文件中添加一个连接字符串,以便引用的F#项目能够在运行时访问数据库。实体框架通过AppSettings.Json文件使用它的数据字符串。我不知道是否有更好的方法将其连接起来,但同样,当我在本地运行它,而不是在它被部署到的服务器上运行时,它是完美的。

有什么东西,我需要启用或改变代码明智的应用程序工作在生产服务器?

这里是我的数据字符串的视图。在我的F#项目中,我有一个app.config文件:

代码语言:javascript
复制
<?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#项目中,我有另一个用于访问运行时连接字符串的文件:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
<configuration>
   <runtime>
      <gcServer enabled="true"/>
   </runtime>
   <connectionStrings>
       <add name="DefaultConnection" connectionString="Data Source=server 
            code here" providerName="System.Data.SqlClient"/>

  </connectionStrings>
</configuration>

在appsettings.json中,配置如下:

代码语言:javascript
复制
{
  "ConnectionStrings": {

    "DefaultConnection": "Data Source=Server code Here"
  }
}

这是实际的查询代码:

代码语言:javascript
复制
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#项目如何在主项目中定位文件?我是不是把事情搞得太复杂了?

EN

回答 1

Stack Overflow用户

发布于 2017-07-16 19:26:17

您似乎在寻找App.config来查找连接字符串。在部署时,通常会用不同的.dll.config文件替换它,尽管这似乎不是问题所在。您的Azure连接字符串中有不正确的DefaultConnection吗?除此之外,我建议解析来自appsettings.json而不是app.config文件的连接字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45122650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档