Когда я столкнулся с этой ошибкой в Visual Studio,
«При установлении соединения с SQL Server возникла связанная с сетью или конкретная ошибка экземпляра. Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (поставщик: поставщик Named Pipes, ошибка: 40 - не удалось открыть соединение с SQL Server) »
blockquote>... это было во время выполнения следующего кода C #, который пытался получите данные SQL Server, чтобы отобразить их в сетке. Разрыв произошел именно в строке, которая говорит connect.Open ():
using (var connect = Connections.mySqlConnection) { const string query = "SELECT Name, Birthdate, Narrative FROM Friends"; using (var command = new SqlCommand(query, connect)) { connect.Open(); using (var dr = command.ExecuteReader()) { while (dr.Read()) { // blah } } } }
Это было необъяснимо, потому что SQL-запрос был очень простым, у меня была правильная строка подключения, и сервер базы данных был доступен. Я решил запустить сам SQL-запрос вручную в SQL Management Studio, и он прошел отлично и дал несколько записей. Но в результатах запроса оставалось одно: в тексте типа «varchar (max) в таблице« Друзья »был некорректно закодированный текст HTML (в частности, некоторые закодированные символы комментариев сортировки
<!--
, помещенные в данные столбца« Повествование » ). Строка подозрительных данных выглядела так:Name Birthdate Narrative ==== ========= ============== Fred 21-Oct-79 <!--HTML Comment -->Once upon a time...
Обратите внимание на кодированный HTML-символ «
<
», который означал «& lt;» персонаж. Как-то это пробилось в базу данных, и мой код на C # не смог его забрать! Он провалился каждый раз прямо на линии connect.Open ()! После того, как я вручную отредактировал эту одну строку данных в таблице базы данных «Друзья» и поместил в декодированный «& lt;» характер, все сработало! Вот как должна выглядеть эта строка:Name Birthdate Narrative ==== ========= ============== Fred 21-Oct-79 <!--HTML Comment -->Once upon a time...
Я отредактировал одну плохую строку, которую я использовал, используя этот простой оператор UPDATE ниже. Но если у вас было несколько нарушающих строк закодированного HTML, вам может понадобиться более сложная инструкция UPDATE, которая использует функцию REPLACE:
UPDATE Friends SET Narrative = '<!--HTML Comment -->Once upon a time...' WHERE Narrative LIKE '<%'
Итак, мораль истории (по крайней мере, в моем случае) , дезинфицируйте свой HTML-контент, прежде чем хранить его в базе данных, и вы не получите эту загадочную ошибку SQL Server в первую очередь! (Ну, правильная дезинфекция / декодирование вашего HTML-контента является предметом другого обсуждения, достойного отдельного поиска StackOverflow, если вам нужна дополнительная информация!) [/ G6]
При вызове AddSerilog
в ConfigureServices
регистрируется поставщик услуг регистрации в Microsoft ILoggingBuilder
. Этот провайдер ( SerilogLoggerProvider
) реализует метод ILoggerProvider
и его метод CreateLogger
, который выглядит следующим образом:
public ILogger CreateLogger(string name)
{
return new SerilogLogger(this, _logger, name);
}
Это ясно из этого кода что Serilog SerilogLogger
реализует интерфейс Microsoft ILogger
.
Когда платформе ASP.NET Core требуется создать объект регистратора, она использует реализации ILoggerProvider
для создания экземпляров ILogger
, вызывая CreateLogger
. При наличии зарегистрированного поставщика Serilog это заканчивается тем, что ASP.NET Core запрашивает экземпляр ILogger
и получает экземпляр SerilogLogger
, который обеспечивает мост между ASP.NET Core и Serilog.
Приемник RollingFile сам создает сконфигурированный файл журнала автоматически каждый раз, когда генерируется событие журнала, со своей собственной логикой для создания файлов с метками времени и т. Д., Соответственно.