如何在WCF服务应用程序中使用Microsoft.SqlServer.Types

时间:2019-01-02 09:43:57

标签: wcf dbgeography

我正在处理WCF服务应用程序。我想找到最接近某人的位置。 我的问题是当我想调用与System.Data.Entity.Spatial.DbGeography相关的任何方法时,都会收到此错误 “无法找到此提供程序的空间类型和功能,因为找不到程序集'Microsoft.SqlServer.Types'版本10或更高版本。”

我在Visual Studio 2017解决方案中通过NuGet安装了Microsoft.SqlServer.Types 并在调用DbGeography类之前先调用SqlServerTypes程序集

    private bool _IsSqlServerTypesLoaded;
    private void CheckSqlServerTypes()
    {
        if (!_IsSqlServerTypesLoaded)
        {
           System.Data.Entity.SqlServer.SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=14.0.1016.290, Culture=neutral, PublicKeyToken=89845dcd8080cc91";
            SqlServerTypes.Utilities.LoadNativeAssemblies(System.IO.Path.Combine(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath, "bin"));
            _IsSqlServerTypesLoaded = true;
        }
    }

在尝试查询位置之前,我会调用CheckSqlServerTypes() 但我仍然收到此错误 “空间类型和功能不适用于此提供程序,因为找不到程序集'Microsoft.SqlServer.Types'版本10或更高版本。”

我的错误是什么?

1 个答案:

答案 0 :(得分:0)

我发现了自己的错误并想分享,可能对其他人有用

在上面的代码中,我将“版本= 14.0.1016.290”更改为“版本= 14.0.0.0”

还将其添加到web.config

<assemblyBinding>
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
      <bindingRedirect oldVersion="10.0.0.0-11.0.0.0" newVersion="14.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>

一切正常