После обновления Entity Framework моя StoredProcedure в среде CLR перестала работать, пока я не скомпилировал ее снова.

Я задаю этот вопрос перед sql server clr-how для вызова службы wcf в хранимой процедуре clr sql в Visual Studio и создания stored procedure для вызова wcf service, но когда я обновляю платформу сущностей с 4.5 до 4.5.1 на моей хранимой процедуре сервера, нет работа и ее ошибка вокруг сборки System.ServiceModel
Я вынужден был сделать все шаги в ответ на мой старый вопрос и снова опубликовать хранимую процедуру, чтобы она работала.

но я запутался, потому что мой sql-сервер - это 2008 r2, и он работает с entity framework 3.5, почему я должен переиздать свою хранимую процедуру и все шаги. Может ли кто-нибудь мне помочь?


person Mehdi Haghshenas    schedule 16.11.2014    source источник
comment
Не могли бы вы предоставить нам более подробную информацию (сообщение, трассировку стека) об этой ошибке? Когда именно это наблюдается?   -  person Michał Komorowski    schedule 20.11.2014
comment
Нет, потому что, когда я снова публикую, эта проблема не повторяется   -  person Mehdi Haghshenas    schedule 21.11.2014
comment
Без точного сообщения об ошибке трудно сказать наверняка, но вы говорите, что удалили все связанные сборки и снова добавили их? Вы перезагружали сервер перед повторной публикацией? Возможно, некоторые библиотеки были изменены в основном GAC, и SQL Server ожидал более старых версий.   -  person Solomon Rutzky    schedule 25.11.2014
comment
@srutzky Да, я тоже перезагружаю компьютер   -  person Mehdi Haghshenas    schedule 25.11.2014


Ответы (3)


Я думаю, что ваш способ решения проблемы неверен,
Для вызова службы WCF в SQL Server вы должны использовать System.Web.Service вместо System.ServiceModule
Я использую эту сборку, вы не заставляете добавлять

  • System.Messaging
  • System.IdentityModel
  • System.IdentityModel.Selectors
  • Microsoft.Transactions.Bridge
  • System.Runtime.Serialization
  • System.ServiceModel

этот способ очень прост, просто добавьте службу, например старую веб-службу
для получения дополнительной информации используйте Вызов WCF в CLR

person Ehsan Roghani    schedule 26.11.2014

Причина, по которой вы получили ошибку на System.ServiceModel, заключается в следующем:

  • Вы загрузили System.ServiceModel.dll в SQL Server, поскольку это не поддерживаемая библиотека .Net Framework

  • Вы обновили основной System.ServiceModel.dll, вероятно, в рамках обновления Entity Framework

  • Версия DLL, загруженная в SQL Server, больше не соответствует версии DLL в GAC.

  • # P5 #
    # P6 #
    # P7 #

Думаю, я только что нашел ту ошибку, с которой вы столкнулись. Посмотрите эту страницу:

Сообщение об ошибке при выполнении подпрограммы CLR или использовании сборки в SQL Server: сборка в хранилище хоста имеет другую подпись, чем сборка в GAC. (Исключение из HRESULT: 0x80131050)

Что гласит (в Сценарии 1):

Вы создаете процедуру общеязыковой среды выполнения (CLR), которая ссылается на сборку Microsoft .NET Framework. Сборка .NET Framework не описана в статье 922672 базы знаний. Затем необходимо установить .NET Framework 3.5 или исправление на основе .NET Framework 2.0.

Этот сценарий поддерживает то, что я упомянул над строкой.

person Solomon Rutzky    schedule 03.12.2014

Некоторое время назад у меня была связанная ошибка. Выданная ошибка была:

Не удалось загрузить тип System.ServiceModel.Activation.HttpModule из сборки System.ServiceModel, Version = 3.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089

Эта ошибка может возникать, если IIS установлен / обновлен после установки .NET Framework 4 или если модуль Http Activation v3.0 установлен после .NET. Framework 4 установлен. Как бы то ни было, проблема, как вы упомянули, заключалась в обновлении EF.

Может быть, это может быть полезно:

  • Запустите инструмент Средство регистрации ASP.NET IIS (Aspnet_regiis.exe)
  • Выполните команду для регистрации новой версии:
    C:\Windows\Microsoft.NET\Framework64\v4.0.30319>aspnet_regiis.exe –iru

Вы можете получить больше информации здесь:

Или, может быть, вы хотите обновить библиотеку в GAC. Библиотеки фреймворка кэшируются в GAC, проверьте эту статью Как: установить сборку в глобальный кэш сборок и эту тему Обновление библиотеки DLL в GAC

person jherax    schedule 26.11.2014
comment
Но я заставляю регистрировать dll на SQL-сервере не для iis, а iis-сервер был на другом сервере - person Mehdi Haghshenas; 26.11.2014
comment
Библиотеки фреймворка кэшируются в GAC, проверьте эту статью Как: установить сборку в глобальный кэш сборок и эту тему Обновление библиотеки DLL в GAC - person jherax; 26.11.2014