1

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

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

然后,我在数据库中注册了 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] 

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

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

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

4

1 回答 1

0

我已经解决了这个问题。我发现问题在于 Web 引用不适用于 WCF 和 CLR。发现这一点后,我使用 wsdl.exe 实用程序为 Web 服务生成了代理类,但它没有正确创建代码。使用 svcutil.exe 实用程序生成代理类对我有用。然后我将生成的代理类添加到我的项目中并编译程序集。

于 2014-05-09T06:52:48.753 回答