Хорошо, это действительно расстраивает, и я надеюсь, что кто-то может мне с этим помочь. Я только что начал изучать несколько руководств по SignalR, и все они отлично работали. Затем я решил добавить модель MVC Entity Framework для доступа к некоторым данным в мой проект SignalR, чтобы я мог хранить имя и сообщения, которые были отправлены в мой тестовый центр сообщений чата.
Вот неприятная часть, все это отлично работает, когда я запускаю отладку из Visual Studio, но как только я публикую на своем сервере IIS, код Entity Framework в моем концентраторе сообщений перестает работать и выдает эту ошибку: ProviderIncompatibleException
Внутреннее исключение: "{" Произошла ошибка при получении информации о провайдере из базы данных. Это может быть вызвано тем, что Entity Framework использует неверную строку подключения. Для получения подробной информации проверьте внутренние исключения и убедитесь, что строка подключения верна. "}"
Следующее внутреннее исключение: {"Поставщик не вернул строку ProviderManifestToken."}
Последнее внутреннее исключение: {"при установке соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений. (Поставщик: Сетевые интерфейсы SQL, ошибка: 50 - Произошла ошибка времени выполнения локальной базы данных. Ошибка произошла во время запуска экземпляра LocalDB: не удалось запустить процесс SQL Server. \ R \ n) "}
Эта ошибка возникает в "db.Database.Initialize (false);" в моем коде концентратора сообщений.
Это меня так расстроило, что я изучал эти сообщения об ошибках вчера вечером до 1:00. Я был бы очень признателен за ЛЮБУЮ помощь в этом. И больше всего расстраивает то, что этот код настолько прост, что должен просто работать ...
Спасибо.
Вот код для моего концентратора сообщений:
public class BPACustomerServiceMessageHub : Hub
{
public void Send(string name, string message)
{
Database.SetInitializer(new CreateDatabaseIfNotExists<MessagesContext>());
using (MessagesContext db = new MessagesContext())
{
db.Database.Initialize(false);
Messages omsg = new Messages();
omsg.name = name;
omsg.message = message;
db.Messages.Add(omsg);
db.SaveChanges();
db.Dispose();
}
// Call the broadcastMessage method to update clients.
Clients.All.broadcastMessage(name, message);
SendParams mparams = new SendParams();
mparams.Name = name;
mparams.Message = message;
Clients.All.broadcastMessage2(mparams);
}
}
public class SendParams
{
public string Name { get; set; }
public string Message { get; set; }
}
Вот код моей модели и контекста:
public class Messages
{
[Key]
public int id { get; set; }
public string name { get; set; }
public string message { get; set; }
}
public class MessagesContext : DbContext
{
public DbSet<Messages> Messages { get; set; }
}
Вот моя строка подключения из моего файла web.config:
<connectionStrings>
<add name="MessagesContext"
connectionString="Data Source=(LocalDB)\v11.0;
database=Messages;
AttachDbFilename=|DataDirectory|\Messages.mdf;
Initial Catalog=Messages;
Integrated Security=True"
providerName="System.Data.SqlClient" />