Я не могу использовать WCF в SQL CLR 2012

При добавлении моих сборок в SQL Server 2012 зависимости отрисовываются в system.servicemodel, которые рисуют в microsoft.visualbasic.activities.compiler, и это приводит к следующей ошибке:

CREATE ASSEMBLY for assembly '<assembly name>' failed because assembly 'microsoft.visualbasic.activities.compiler' is malformed or not a pure .NET assembly. 
Unverifiable PE Header/native stub.

Кажется, что библиотеки DLL WCF нельзя добавить в SQL Server 2012.

Есть ли обходной путь? Исправлено ли это в SQL Server 2014?


person Oszkar    schedule 24.06.2014    source источник
comment
Не могли бы вы просто объяснить тем из нас, кто любит приличную архитектуру, почему вам вообще пришла в голову идея запускать WCF в бэкэнде базы данных?   -  person TomTom    schedule 24.06.2014
comment
Согласитесь с @TomTom, что это кажется действительно плохой идеей. SSIS с задачей сценария — это простой способ отправки данных в службу WCF и из нее.   -  person adrianm    schedule 24.06.2014
comment
На самом деле я не хочу использовать WCF, но некоторые зависимости рисуются в system.servicemodel. Я хотел не учитывать эти зависимости, потому что это довольно большой проект, но это то, что мы, вероятно, сделаем. Архитектурно тоже будет чище.   -  person Oszkar    schedule 24.06.2014


Ответы (1)


Нет, SQL-Server допускает лишь довольно ограниченное подмножество C# из соображений безопасности.
Например, достаточно добавить ссылку на System.Web, чтобы она не работала.

Возможно, вы сможете вырвать часть System.ServiceModel, которая вам нужна, из моно исходного кода и заставить ее работать таким образом. Если повезет, если вам нужен только один или два вызова функций, вы можете заставить его работать с несколькими изменениями.

На заметку: если бы вы могли добавить WCF в хранимую процедуру CLR, вы могли бы заставить SQL-Express использовать конечные точки HTTP. Но одним из определяющих ограничений SQL-Server Express является то, что версия Express этого не позволяет. Если бы это было возможно, вы могли бы обойти это ограничение, а Microsoft этого явно не хочет.

См. также этот пост:
Клиент WCF внутри SQL CLR

person Stefan Steiger    schedule 24.06.2014
comment
Вы случайно не знаете, исправлено ли это в SQL Server 2014? - person Oszkar; 24.06.2014
comment
Что исправлено? Что они допускают абсолютно тупой подход, который никто, уважающий базу данных, даже не стал бы пробовать? А не. - person TomTom; 24.06.2014
comment
@Oszkar: Как я уже сказал: нет, это не ошибка, и поэтому она не исправлена. - person Stefan Steiger; 24.06.2014