Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mendorong data dari SQL Server ke Aplikasi Web dengan SignalR

Yah, saya agak terlambat menyadari tentang perpustakaan SignalR.Client.NET.35.

Pada saat penulisan, kode ini tidak dikemas dalam NuGet, jadi kodenya harus diunduh dari Situs Proyek SignalR GitHub dan ditambahkan sebagai proyek ke solusi (keduanya SignalR.Client.NET dan SignalR.Client.NET35 diperlukan).

Inilah solusi terakhir, jika ini dapat membantu seseorang di masa depan:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Xml;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.Net;
using System.IO;
using System.Xml.XPath;
using SignalR.Client.Hubs;

    internal static HubConnection connectionT = null;
    internal static IHubProxy msgHubT = null;

    /// <summary>
    /// allows SSRV to send a message to the Web Socket hub
    /// </summary>
    /// <param name="URL">URL of the Hub</param>
    /// <param name="hubName">Name of the message Hub to be used for broadcasting.</param>
    /// <param name="hubMethod">Hub method to be used for broadcasting.</param>
    /// <param name="message">Message to be broadcasted.</param>
    [SqlFunction()]
    public static void ut_sendMsgToHub(string URL, string hubName, string hubMethod, string message)
    { 
      try
        {
        if (connectionT == null)
        {
            connectionT = new HubConnection(URL.Trim()); // "http://localhost:56844/M2Hub"
        }
        if (msgHubT == null)
        {
            msgHubT = connectionT.CreateProxy(hubName.Trim());//"M2data"
        }

            if (!(connectionT.State == SignalR.Client.ConnectionState.Connected 
                || connectionT.State == SignalR.Client.ConnectionState.Reconnecting
                 || connectionT.State == SignalR.Client.ConnectionState.Connecting))
                connectionT.Start().Wait();
            msgHubT.Invoke(hubMethod.Trim(), message.Trim()).Wait();//"Send"
        }
        catch (Exception exc)
        {
            SqlContext.Pipe.Send("ut_sendMsgToHub error: " + exc.Message + Environment.NewLine);
        }
    }

Penting untuk diperhatikan:bersama dengan pustaka SQL SERVER 2008R2 CLR yang dikompilasi, Anda harus menempatkan dll berikut di folder yang sama:

  • Newtonsoft.Json
  • SignalR.Client.Net35 tentu saja
  • Diagnostik SM
  • System.Runtime.Serialization
  • System.ServiceModelin versi yang benar (lihat versi seperti yang dinyatakan dalam GAC di C:\Windows\assembly jika tidak kompatibel).
  • System.Threading

akhirnya di SQL SERVER:

CREATE ASSEMBLY CLR_Bridge from 'C:\PathToLibraries\Library_CLR.dll' 
WITH PERMISSION_SET = UNSAFE --UNSAFE required
CREATE PROCEDURE ut_sendMsgToHub 
@url nchar(125) ,
@hubName nchar(75),
@hubMethod NCHAR(75),
@message NVARCHAR(MAX)
AS
EXTERNAL NAME CLR_Bridge.[LibraryNamespace.CLR_Bridge].ut_sendMsgToHub 

Untuk memanggil ut_sendMsgToHub saya menggunakan broker layanan sehingga saya yakin bahwa setiap masalah dengan pelaksanaan fungsi dipisahkan dari prosedur tersimpan yang memproses data



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. String Format Numerik Standar Didukung oleh FORMAT() di SQL Server

  2. Terhubung ke Database MSSQL menggunakan Flask-SQLAlchemy

  3. Apakah lebih baik menjalankan banyak perintah sql dengan satu koneksi, atau menyambung kembali setiap saat?

  4. Tampilan SQL:Bergabung dengan tabel tanpa menyebabkan data terduplikasi di setiap baris?

  5. SQL Server Saya perlu memperbaiki kesalahan Timeout expired. Periode batas waktu telah berlalu