sql >> Databáze >  >> RDS >> Sqlserver

Přenášení dat ze serveru SQL Server do webové aplikace pomocí SignalR

No, uvědomil jsem si trochu pozdě o knihovně SignalR.Client.NET.35.

V době psaní tohoto článku není zabalen v NuGet, takže kód musí být stažen ze stránek projektu GitHub SignalR a přidány jako projekt do řešení (obě SignalR.Client.NET a SignalR.Client.NET35 vyžadováno).

Zde je konečné řešení pro případ, že by mohlo v budoucnu někomu pomoci:

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);
        }
    }

Důležité upozornění:spolu s kompilovanou knihovnou SQL SERVER 2008R2 CLR budete muset umístit následující knihovny dll do stejné složky:

  • Newtonsoft.Json
  • Samozřejmě SignalR.Client.Net35
  • SMdiagnostika
  • System.Runtime.Serialization
  • System.ServiceModelin správnou verzi (v případě nekompatibility viz verzi uvedenou v GAC v C:\Windows\assembly).
  • System.Threading

konečně v 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 

K volání ut_sendMsgToHub používám zprostředkovatele služeb, abych si byl jistý, že jakýkoli problém s prováděním funkce je oddělen od uložených procedur zpracovávajících data



  1. Jak vytvořit index pro dynamické vyhledávací řetězce

  2. Je možné provést hromadné kopírování v mysql

  3. Nalezení minima ve sloupci, kde jsou dva další sloupce nulové

  4. Podpora dBase je zpět v aplikaci Microsoft Access!