2013-03-02 3 views
7

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

Msg 6544, уровень 16, состояние 1, строка 1
CREATE ASSEMBLY для сборки 'system.serviceModel' не удалось, потому что сборка 'microsoft.visualbasic.activities.compiler' имеет неверный формат или не является чисто .NET сборки , Неиспытаемый заголовок PE/родной заглушка.

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

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

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

+0

Вместо этого вызовите службу WCF, которая проксирует вызов в очередь. – abatishchev

+0

Какова битость SQL Server и сборки? – abatishchev

ответ

2

У меня такая же проблема, как и вы, и я не знаю, есть ли решение для этого. Что я нашел:

Существует два типа сборок .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.

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

+1

Что случилось? Вы нашли решение? – sojim2

Смежные вопросы