У меня проблема с FSharp.Data.SqlClient. Я создаю полнофункциональное веб-приложение Asp.net Core 4.6. Основной проект находится на C#, который ссылается на несколько проектов на F#. Каждый из этих проектов F# использует FSharp.Data.SqlClient для доступа к данным. При локальном запуске приложения все работает нормально, но когда я развертываю его в Azure, я получаю сообщение об ошибке «Ошибка экземпляра», когда код F # пытается выполнить запрос.
У меня есть подозрение, что это каким-то образом связано с тем, как используются строки подключения, или, возможно, с каким-то конфликтом времени выполнения между FSharp.Data.SqlClient и Entity Framework. Entity framework находится в основном проекте для обработки данных о членстве и ничего больше. Мне нужно специально добавить строку подключения в файл конфигурации в основном проекте, чтобы указанные проекты F# могли получить доступ к базе данных во время выполнения. Платформа Entity использует свою строку данных через файл 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
В основном проекте С# у меня есть файл 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")))
** Обновление: ** После удаленной отладки приложения это все сообщение об ошибке, которое оно выдает
При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений. (поставщик: Сетевые интерфейсы SQL, ошибка: 26 — Ошибка при обнаружении указанного сервера/экземпляра)
Это странно для меня, поскольку используемая строка подключения такая же, как и в Entity Framework, которая, похоже, отлично обращается к базе данных.
Новое обновление Хорошо, кажется, я понял, что происходит. Я считаю, что это определенно проблема конфигурации. Итак, как я уже говорил ранее, при разработке мне пришлось создать файл конфигурации, чтобы создать строку подключения, к которой мог подключиться FSharp.Data.SqlClient. Я не мог понять, как заставить его подключиться к строке подключения в файле appsettings.json. Возможно, кто-то может объяснить это мне, так как это может быть лучшим решением. Во всяком случае, я продолжил свое предположение о том, что строка подключения внутри файла конфигурации не обновлялась при развертывании, вручную вставив строку подключения к производственному серверу, а затем развернув приложение. Конечно, проблема исчезла, и все заработало нормально. Итак, теперь возникает вопрос, как лучше всего правильно подключить FSharp.Data.SqlClient к строке подключения в основном приложении, которое использует файл appsettings.json? Как мне решить эту проблему? Мне нужен кто-то, чтобы провести меня через это, так как я новичок в этом.
Текущий статус
Итак, после осознания того, что это действительно проблема с конфигурацией, теперь возникает вопрос, как правильно получить параметры подключения из файла appsettings.json через мои проекты F#. Используя провайдер FSharp.Data json, мне нужно выяснить, как правильно найти файл appsettings.json как для производства, так и для разработки. Как проект F# может найти файл в основном проекте? Я просто слишком все усложняю?
FSharp.Data.SqlClient
? - person Tomas Petricek   schedule 16.07.2017Admin.rtConnection
команде при ее создании, так что мне этот бит кажется нормальным! - person Tomas Petricek   schedule 16.07.2017