Хранимая процедура SQL CLR, вызывающая веб-службу, получает исключение System.Net.WebException: запрос завершился неудачно с состоянием HTTP 415: неподдерживаемый тип носителя

Я создал проект 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 клиента (базы данных), но опять же я не знаю, как это проверить.

Есть идеи, как исправить эту ошибку?


person aishah    schedule 30.04.2014    source источник
comment
Я решил эту проблему. Я обнаружил, что проблема заключалась в веб-ссылке, которая не работает с WCF и CLR. Обнаружив это, я сгенерировал прокси-класс для веб-службы с помощью утилиты wsdl.exe, но она неправильно создала код. Использование утилиты svcutil.exe для создания прокси-класса помогло мне. Затем я добавляю сгенерированный прокси-класс в свой проект и компилирую сборку.   -  person aishah    schedule 08.05.2014


Ответы (1)


Я решил эту проблему. Я обнаружил, что проблема заключалась в веб-ссылке, которая не работает с WCF и CLR. Обнаружив это, я сгенерировал прокси-класс для веб-службы с помощью утилиты wsdl.exe, но она неправильно создала код. Использование утилиты svcutil.exe для создания прокси-класса помогло мне. Затем я добавляю сгенерированный прокси-класс в свой проект и компилирую сборку.

person aishah    schedule 09.05.2014