调用Web Service的SQL CLR存储过程接收System.Net.WebException:请求失败,HTTP状态为415:不支持的媒体类型

时间:2014-04-30 13:10:38

标签: sql clr system.net.webexception

我在Visual Studio 2012(目标框架:3.5)中创建了一个将调用Web服务(WCF)的SQL CLR项目。最初,我在项目中创建了一个Web服务的Web引用,但是我一直无法加载动态生成的程序集'在执行创建的存储过程时。经过大量的谷歌搜索,我使用wsdl实用程序从Web服务的WSDL创建代码并将其添加到项目中。

我已经启用了“生成序列化程序集”#39;在项目的属性页面中生成序列化DLL,因为sgen实用程序对我不起作用。在数据库(SQL Server 2008)方面,我启用了CLR并将数据库的可信赖设置为on。

然后,我在数据库中注册了CLR程序集和Serialized 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] 

但是当我执行存储过程时,我收到了“不支持的媒体类型”#39;例外。我搜索了建议检查客户端(数据库)和Web服务的SOAP版本的错误之一。我已经验证了Web服务使用的是SOAP 1.2,但我不知道如何检查SQL Server正在使用的SOAP版本。

另一位建议检查客户端(数据库)的内容/ mime类型,但我再也不知道如何检查。

任何想法如何解决此错误?

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。我发现问题是Web引用无法与WCF和CLR一起使用。找到这个之后,我使用wsdl.exe实用程序生成了Web服务的代理类,但它没有正确创建代码。使用svcutil.exe实用程序生成代理类对我来说是个窍门。然后我将生成的代理类添加到我的项目并编译程序集。