Почему это соединение с базой данных терпит неудачу, когда "Имя приложения = приложение" находится в строке подключения?
Мы пишем многоуровневое приложение 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
Изменение строки подключения может быть красной селедкой. Мы получаем этот отказ только на одном веб-сервере (тот, к которому у меня нет прямого доступа). Добавление свойства в базу данных, на которое ссылается другой веб-сервер (к которому у меня есть доступ), не воспроизводит проблему. Это приводит меня к выводу, что ошибка находится где-то в другом месте. Тем не менее, я все еще не готов к решению этого вопроса.
Фактическая ошибка является исключением:
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. Я проверил, и они есть.
Ошибки подключения к серверу базы данных. Я не думаю, что это так, как работает проверка подлинности форм. Это другая база данных на сервере, но учетные данные одинаковы.
Проблема оказалась из-за версии RIA Services, установленной на сервере.
Недавно мы изменили проекты, включив службы RIA через диспетчер пакетов NuGet, и на этом сервере уже установлены службы RIA для VS2010. Когда мы разобрали это, все ожило.
Непонятно, почему так долго нужно было проявлять эту проблему.
Мы получаем этот отказ только на одном веб-сервере (у которого у меня нет прямого доступа). Добавление свойства в базу данных, на которое ссылается другой веб-сервер (к которому у меня есть доступ), не воспроизводит проблему.
Проверьте конфигурацию веб-сервера и правильность установки базы данных.
выглядит как установка webserver config/db для меня.
Еще в рубрике
- Вопросы
- Connection-string
- Почему это соединение с базой данных терпит неудачу, когда "Имя приложения = приложение" находится в строке подключения?