SqlDependency and .NET Core?

2019-06-19 01:03发布

问题:

Is it possible to leverage System.Data.SqlClient.SqlDependency from within a .NET Core v1.1 application? It appears that most of the other classes and methods within System.Data.SqlClient are available except SqlDependency.

Essentially, I'm trying to subscribe to SQL notifications when table data changes to then update the client's UI, so I'm open to other ways to achieve this if SqlDependency is not available from .NET Core.

Thanks in advance! Here's my complete project.json file:

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.1.0",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Authentication": "1.0.0",
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
    "System.IdentityModel.Tokens.Jwt": "5.0.0",
    "Microsoft.AspNetCore.Authentication.OpenIdConnect": "1.0.0",
    "Microsoft.AspNetCore.Authentication.Google": "1.0.0",
    "Microsoft.AspNetCore.Authentication.JwtBearer": "1.0.0",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.EntityFrameworkCore": "1.1.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.1.0",
    "Microsoft.Extensions.Configuration.Binder": "1.1.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Identity": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Rewrite": "1.0.0",
    "Microsoft.AspNetCore.ResponseCompression": "1.0.0",
    "Microsoft.AspNetCore.SignalR.Server": "0.2.0-*",
    "Microsoft.AspNetCore.WebSockets": "0.2.0-*"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "netstandard1.1": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8",
        "net461",
        "dnxcore50"
      ]
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

  "publishOptions": {
    "include": [
      "Views",
      "wwwroot",
      "appsettings.json",
      "appsettings.dev.json",
      "web.config"
    ]
  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

回答1:

There's a .Net Core based open source solution available on GitHub : https://github.com/dyatchenko/ServiceBrokerListener

I'm not sure about the performance however, because it seems that the multiple client-app listening for changes are creating dedicated queues. So maybe it doesn't scale as good as the original SqlDependency.



回答2:

According to this https://github.com/dotnet/corefx/issues/8188 it will be there in .NET Core 2.1, but I haven't seen anything about whether the usage differs from .NET Framework. I hope it doesn't.