Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在SQL2005中部署WCF客户端程序集_.net_Wcf_Sql Server 2005_Stored Procedures - Fatal编程技术网

.net 在SQL2005中部署WCF客户端程序集

.net 在SQL2005中部署WCF客户端程序集,.net,wcf,sql-server-2005,stored-procedures,.net,Wcf,Sql Server 2005,Stored Procedures,我正在尝试在SQL2005中部署WCF客户端程序集。这意味着我需要为我的WCF客户端创建/注册依赖项,它们是: System.Runtime.Serialization 系统.Web System.ServiceModel 使用此脚本: CREATE ASSEMBLY System_Runtime_Serialization FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\Syste

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

  • System.Runtime.Serialization
  • 系统.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.

这似乎为其他人解决了这个问题

我刚刚在SQLServer2005SP2安装上尝试了完全相同的语句,效果很好。我猜您的.NET framework安装,尤其是System.Web,已经损坏,因为它引用了自身。您可以在任何其他系统上试用它,或者尝试重新安装.NET framework吗


这是来自MSDN的,最初出现问题的人说它解决了问题。

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

我可能得到的最接近的方法是在数据库中有一个队列表,并让windows服务将其工作、处理和标记为已完成(或删除)。这允许您在不过载数据库的情况下扩展此类工作

我相信它可能会起作用。。。我只是不想自己做。

好吧,我想好了:

我想这是因为我使用的是64位系统。我试图将System.Web的32位版本添加到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

我也有同样的问题,但是我自己编写了一个客户端程序集。一个更简单的解决方案是重新编译我的程序集,将平台目标设置为“AnyCPU”而不是“x86”,从而使它们可以被运行SQL Server的64位系统接受

  • 右键单击VS项目并选择属性
  • 单击“属性”窗口左边缘的“生成”选项卡
  • 将平台目标值从x86更改为AnyCpu
  • 重新编译
  • 在SQL Server中重新安装程序集

  • 诚然,当程序集由Microsoft提供且无法重新编译时,此解决方案对您的情况没有帮助,但是我想为其他使用自定义程序集的人解答,他们可能会发现此页面与我一样有用。

    我计划做的是创建一个CLR函数。我需要将来自Web服务的数据与来自SQL Server的数据连接起来,以便在SQL Server Reporting Services中使用。我知道可以从SSR执行WS-Call,但它们无法加入。我必须从程序文件(x86)中添加System.IdentityModel和System.IdentityModel.Selector,以避免System.Runtime.Serialization上出现FileLoadException