Я создал проект SQL CLR в Visual Studio 2012 (Target Framework: 3.5), который будет вызывать веб-службу (WCF). Первоначально я создал веб-ссылку на веб-службу в проекте, но продолжал получать сообщение «Не удалось загрузить динамически сгенерированную сборку» при выполнении созданной хранимой процедуры. После долгих поисков в Google я использовал утилиту wsdl для создания кода из WSDL веб-службы и добавления его в проект.
Я включил «Создать сериализационную сборку» на странице свойств проекта, чтобы сгенерировать сериализованную DLL, поскольку утилита sgen у меня не работала. На стороне базы данных (SQL Server 2008) я включил CLR и включил надежность базы данных.
Затем я зарегистрировал сборку CLR и сериализованную DLL в базе данных и создал такую процедуру:
CREATE ASSEMBLY [Database] FROM 'C:\MyProject\bin\Debug\Database.dll' WITH PERMISSION_SET = UNSAFE;
CREATE ASSEMBLY [Database.XmlSerializers] FROM 'C:\MyProject\bin\Debug\Database.XmlSerializers.dll' WITH PERMISSION_SET = UNSAFE;
CREATE PROCEDURE [dbo].[XSP_AlertReachedMilestone] @milestoneID INT
WITH EXECUTE AS CALLER
AS EXTERNAL NAME [Database].[StoredProcedures].[XSP_AlertReachedMilestone]
Но когда я выполнил хранимую процедуру, я получил исключение «Неподдерживаемый тип носителя». Я погуглил ошибку, одно из предложений рекомендовало проверить версии SOAP клиента (базы данных) и веб-службы. Я убедился, что веб-служба использует SOAP 1.2, но я не знаю, как проверить, какую версию SOAP использует SQL Server.
Другой предложил проверить тип содержимого / mime клиента (базы данных), но опять же я не знаю, как это проверить.
Есть идеи, как исправить эту ошибку?