代码之家  ›  专栏  ›  技术社区  ›  Sander Rijken

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

  •  4
  • Sander Rijken  · 技术社区  · 17 年前

    • System.Runtime.Serialization
    • 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 回复  |  直到 16 年前
        1
  •  6
  •   Sander Rijken    17 年前

    好吧,我想出来了:

    我想这是因为我使用的是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
    
        2
  •  1
  •   Phoeniceus Agelaius    14 年前

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

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

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

        3
  •  0
  •   Sailing Judo    17 年前

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

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

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

        4
  •  0
  •   Marc Gravell    17 年前

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

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

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

    推荐文章