Почему происходит сбой подключения к базе данных, когда в строке подключения указано «Имя приложения = приложение»? - PullRequest
9 голосов
/ 30 января 2012

Мы пишем мультитенантное приложение Silverlight. Пользователь входит в систему с использованием проверки подлинности Windows Forms, и мы извлекаем строку подключения для этого пользователя из таблицы. Строка имела вид:

Data Source=1.2.3.4; Initial Catalog=database; Persist Security Info=True; User ID=######; Password=##########

Это работало нормально. Затем мы решили, что установка имени приложения по указанным здесь причинам будет хорошей идеей:

Data Source=1.2.3.4; Initial Catalog=database; Application Name=application; Persist Security Info=True; User ID=######; Password=##########

Однако теперь соединение не устанавливается, поэтому мы получаем ошибки. Это только сбой на развернутом сайте. Запуск через Visual Studio, по-видимому, не затронут. Там не было никаких изменений в коде, который устанавливает соединение. Я готов поверить, что должны быть перемены, но я не смог понять, какими они должны быть.

Соединение создается следующим образом:

public class OurDataContext : DataContext
{
    public OurDataContext()
        : base(SessionCache.OurConnectionString)
    {
        ....
    }
 }

SessionCache.OurConnectionString - это строка, прочитанная из базы данных.

UPDATE

Изменение в строке подключения может быть красной сельдью. Мы получаем этот сбой только на одном веб-сервере (тот, к которому у меня нет прямого доступа). Добавление свойства в базу данных, на которую ссылается другой веб-сервер (к которому у меня do есть доступ), не воспроизводит проблему. Это приводит меня к выводу, что ошибка в другом месте. Однако я до сих пор не приблизился к решению этой проблемы.

Фактическая ошибка является исключением:

An exception of type 'System.ServiceModel.DomainServices.Client.DomainOperationException' occurred and was caught.
------------------------------------------------------------------------------------------------------------------
01/31/2012 14:18:53  
Type : System.ServiceModel.DomainServices.Client.DomainOperationException, System.ServiceModel.DomainServices.Client, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Message : Load operation failed for query 'GetUserSecurityConfig'. The remote server returned an error: NotFound.
Status : ServerError
ErrorCode : 0
Data : System.Collections.ListDictionaryInternal
Stack Trace : The stack trace is unavailable.

Все исследования, которые я провел сегодня по этому вопросу, возвращают некоторые довольно простые вещи, которые не должны были изменить:

  • System.ComponentModel.DataAnnotations, System.ServiceModel.DomainServices.EntityFramework, System.ServiceModel.DomainServices.Hosting и System.ServiceModel.DomainServices.Server не копируются в каталог \ bin. Я проверил, и они.
  • Ошибки при подключении к серверу базы данных. Я не думаю это так, поскольку аутентификация форм работает. Это другая база данных на сервере, но учетные данные совпадают.

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Проблема возникла из-за версии RIA Services, установленной на сервере.

Недавно мы изменили проекты, включив в них RIA Services через менеджер пакетов NuGet, и на этом сервере уже были установлены RIA Services для VS2010. Когда мы с этим разобрались, все ожило.

Непонятно, почему потребовалось так много времени, чтобы эта проблема проявилась.

0 голосов
/ 31 января 2012

Эта ошибка возникает только на одном веб-сервере (к которому у меня нет прямого доступа). Добавление свойства в базу данных, на которую ссылается другой веб-сервер (к которому у меня есть доступ), не воспроизводит проблему.

Проверьте конфигурацию веб-сервера и убедитесь, что база данных установлена ​​правильно.

выглядит для меня как установка webserver config / db.

...