Зарегистрировать функцию CLR (на основе WCF) в SQL Server 2012

У меня есть хранимая процедура на основе CLR, которая использовала MsmqIntegrationBinding отправлять сообщения на удаленные MSMQ. В SQL Server 2005 все работало нормально, но теперь ожидается обновление с 2005 по 2012 годы. Я пытался зарегистрировать CLR (SP) в SQL Server 2012, но при регистрации System.ServiceModell.DLL возникла следующая ошибка.

Msg 6544, уровень 16, состояние 1, строка 1
СОЗДАТЬ СБОРКУ для сборки "System.ServiceModel" не удалось, поскольку сборка "microsoft.visualbasic.activities.compiler" повреждена или не является чистой сборкой.NET. Неподтверждаемый PE Заголовок / родная заглушка.

Я искал решение, и похоже, что немногие люди сталкиваются с такой же проблемой, и на данный момент нет решения.

Основная причина использования MSMQIntegrationBinding Мы хотим убедиться, что каждое сообщение доставляется только один раз. Как вы можете видеть, я был очень заинтересован в ExactlyOnce свойство, которого нет в обычном классе system.messaging. Мы обрабатываем тысячи сообщений, и порядок сообщений очень важен. Кроме того, каждое сообщение помечается идентификатором, и если любое сообщение отправляется с идентификатором, который меньше, чем сообщение, отправленное ранее, клиентская система останавливается (большая проблема).

Я также переписал хранимую процедуру CLR, используя system.messaging. Мне просто нужны предложения, может ли это поддержать сценарий, который я упомянул выше.

1 ответ

У меня та же проблема, что и у вас, и я не знаю, есть ли решение для нее. То, что я нашел, это:

Существует два типа сборок.NET. Чистые сборки.NET содержат только инструкции MSIL. Смешанные сборки содержат как неуправляемые машинные инструкции, так и инструкции MSIL. Смешанные сборки обычно компилируются компилятором C++ с ключом / clr, но содержат машинные инструкции, полученные из собственного кода C++.

Независимо от того, какая версия SQL Server, CREATE ASSEMBLY позволяет регистрировать только чистые сборки.NET. SQL Server всегда требовал, чтобы сборка, загружаемая в базу данных SQL Server с помощью CREATE ASSEMBLY, содержала только инструкции MSIL (чистая сборка). CREATE ASSEMBLY вызовет вышеуказанную ошибку, если регистрируемая сборка является смешанной сборкой.

От http://blogs.msdn.com/b/psssql/archive/2013/02/23/unable-to-register-net-framework-assembly-not-in-the-supported-list.aspx

Дело в том, что нам действительно нужно обратиться к System.ServiceModel,

Итак, я думаю, что в ближайшем будущем это не исправить. То, что мы должны сделать, это код по-другому.

Другие вопросы по тегам