在SQL 2005中部署WCF客户端程序集

时间:2008-12-30 11:51:59

标签: .net wcf sql-server-2005 stored-procedures

我正在尝试在SQL 2005中部署WCF客户端程序集。这意味着我需要为我的WCF客户端创建/注册依赖项,它们是:

  • System.Runtime.Serialization
  • 的System.Web
  • System.ServiceModel

使用此脚本:

CREATE ASSEMBLY System_Runtime_Serialization FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\System.Runtime.Serialization.dll'
WITH PERMISSION_SET = UNSAFE
GO

CREATE ASSEMBLY System_Web FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.dll'
WITH PERMISSION_SET = UNSAFE
GO


CREATE ASSEMBLY System_ServiceModel FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\System.ServiceModel.dll'
WITH PERMISSION_SET = UNSAFE
GO

System.Web.dll的注册失败,并显示以下错误消息:

Assembly 'System.Web' references assembly 'system.web, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: version, culture or public key mismatch). Please load the referenced assembly into the current database and retry your request.

4 个答案:

答案 0 :(得分:6)

好的,想出来了:

我认为这是因为我使用的是64位系统。我试图将32位版本的System.Web添加到64位SQL Server(我认为32位版本确实引用了64位版本)。

无论如何,作为参考,工作代码如下:

CREATE ASSEMBLY System_Runtime_Serialization FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\System.Runtime.Serialization.dll'
WITH PERMISSION_SET = UNSAFE
GO

CREATE ASSEMBLY System_Web FROM 'C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Web.dll'
WITH PERMISSION_SET = UNSAFE
GO

CREATE ASSEMBLY System_IdentityModel FROM 'c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.IdentityModel.dll'
WITH PERMISSION_SET = UNSAFE
GO
CREATE ASSEMBLY System_IdentityModel_Selectors FROM 'c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.IdentityModel.Selectors.dll'
WITH PERMISSION_SET = UNSAFE
GO

CREATE ASSEMBLY System_Messaging FROM 'c:\windows\Microsoft.net\Framework\v2.0.50727\System.Messaging.dll'
WITH PERMISSION_SET = UNSAFE
GO

CREATE ASSEMBLY System_ServiceModel FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\System.ServiceModel.dll'
WITH PERMISSION_SET = UNSAFE
GO

答案 1 :(得分:1)

我遇到了同样的问题,但是我自己编写了一个客户端程序集。一个更简单的解决方案是重新编译我的程序集,将Platform Target设置为“AnyCPU”而不是“x86”,从而使它们对于运行SQL Server的64位系统来说是可接受的。

  1. 右键单击VS项目并选择“属性”。
  2. 单击“属性”窗口左侧边缘的“构建”选项卡。
  3. 将平台目标值从x86更改为AnyCpu。
  4. 重新编译。
  5. 在SQL Server中重新安装程序集。
  6. 不可否认,此解决方案无法帮助您的程序集由Microsoft提供且无法重新编译,但我想回答其他人使用自定义程序集可能会发现此页面非常有用。

答案 2 :(得分:0)

这似乎可以为其他人解决这个问题..

  

我刚刚在我的SQL Server 2005 SP2安装上尝试了这个完全相同的声明,它运行正常。我猜你的.NET框架安装,特别是System.Web是腐败的,因为它引用自己。您可以在任何其他系统上尝试它或尝试重新安装.NET框架

这是来自MSDN,原问题的人说它解决了这个问题。

答案 3 :(得分:0)

只是说......我不确定在SQL-Server中托管WCF客户端是一个特别理想的选择。 SQL / CLR有一些用途,例如,如果您(无论出于何种原因)想要在数据库中使用定制的.NET类型,或者(更有可能)您希望某些非常严格的 实用程序方法,如Split,Regex等。但是,我不会在SQL运行时内运行我的主应用程序逻辑(例如WCF客户端)。

我可能得到的最接近的是在数据库中有一个队列表,并有一个Windows服务出列工作,处理它,并标记它已完成(或删除它)。这允许您在不重载数据库的情况下扩展此类工作。

我确信它可能有用......我不会自己做。

相关问题