1

我在sql server clr-how to call wcf service in clr sql storage procedure in visual studio之前问了这个问题 并创建了一个stored procedure调用wcf service,但是当我在我的服务器存储过程上将实体框架 4.5 更新到 4.5.1 时不起作用并且它的错误是System.ServiceModel组装
我被迫做所有步骤来回答我的旧问题并再次发布存储过程以工作。

但我很困惑,因为我的 sql server 是 2008 r2 并且它与实体框架 3.5 一起使用,为什么我必须重新发布我的存储过程和所有步骤有人可以帮助我吗?

4

3 回答 3

1

我认为你解决问题的方法不正确,
对于调用 WCF 服务,SQL Server你必须使用System.Web.Service而不是System.ServiceModule
我你使用这个程序集,你不要强制添加

  • 系统消息
  • System.IdentityModel
  • System.IdentityModel.Selectors
  • Microsoft.Transactions.Bridge
  • System.Runtime.Serialization
  • 系统.服务模型

这种方式非常简单,只需添加类似旧 Web 服务的服务
以获取更多信息,使用CLR 中的 Calling WCF

于 2014-11-26T20:38:24.070 回答
0

您收到错误的原因System.ServiceModel是:

  • 您加载System.ServiceModel.dll到 SQL Server 中,因为它不是受支持的 .Net Framework 库

  • 您更新了 main System.ServiceModel.dll,可能是升级实体框架的一部分

  • 加载到 SQL Server 中的 DLL 版本不再与 GAC 中的 DLL 版本匹配

  • 加载到 SQL Server中的 DLL 版本必须与 GAC 中的 DLL 版本匹配:

    如果您在 SQL Server 数据库中注册了不受支持的库,您的 SQL Server 应用程序可能会停止工作……因为 GAC 中的服务或升级库不会更新 SQL Server 中的程序集。如果 SQL Server 数据库和 GAC 中都存在程序集,则程序集的两个副本必须完全匹配。如果它们不匹配,则在 SQL Server CLR 集成使用程序集时会发生错误。

    SQL Server 2008/SQL Server 2008R2 中的重大更改


而且我想我刚刚找到了您遇到的确切错误。看看这个页面:

执行 CLR 例程或在 SQL Server 中使用程序集时出现错误消息:“主机存储中的程序集与 GAC 中的程序集具有不同的签名。(来自 HRESULT 的异常:0x80131050)”

其中状态(在“场景 1”中):

您创建一个引用 Microsoft .NET Framework 程序集的公共语言运行时 (CLR) 例程。知识库文章 922672 中未记录 .NET Framework 程序集。然后,您安装 .NET Framework 3.5 或基于 .NET Framework 2.0 的修补程序。

这种情况支持我在上面提到的内容。

于 2014-12-03T06:50:09.563 回答
-1

前段时间我有一个相关的错误。抛出的错误是:

无法从程序集“System.ServiceModel,Version=3.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”加载类型“System.ServiceModel.Activation.HttpModule”

如果在安装.NET Framework 4之后安装/更新 IIS ,或者在安装.NET Framework 4之后安装模块Http Activation v3.0 ,则可能会出现此错误。无论如何,您提到的问题是 EF 的更新。

也许这会有所帮助:

  • 运行工具ASP.NET IIS 注册工具 (Aspnet_regiis.exe)
  • 运行命令注册新版本:
    C:\Windows\Microsoft.NET\Framework64\v4.0.30319>aspnet_regiis.exe –iru

您可以在此处获取更多信息:

或者,也许您想更新GAC中的库。框架的库缓存在GAC中,请查看这篇文章如何:将程序集安装到全局程序集缓存中和这个主题在 GAC 中更新 DLL

于 2014-11-26T18:26:01.287 回答