Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Прехвърляне на данни от SQL Server към уеб приложение със SignalR

Е, разбрах малко късно за библиотеката SignalR.Client.NET.35.

Към момента на писане той не е пакетиран в NuGet, така че кодът трябва да бъде изтеглен от сайта на проекта GitHub SignalR и добавен като проект към решението (и двете SignalR.Client.NET и SignalR.Client.NET35 задължително).

Ето окончателното решение, в случай че може да помогне на някого в бъдеще:

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

Важно е да забележите:заедно с компилираната SQL SERVER 2008R2 CLR библиотека ще трябва да поставите следните dll файлове в същата папка:

  • Newtonsoft.Json
  • SignalR.Client.Net35 очевидно
  • SMdiagnostics
  • System.Runtime.Serialization
  • System.ServiceModelin правилната версия (вижте версията, посочена в GAC в C:\Windows\assembly в случай на несъвместимост).
  • System.Threading

накрая в 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 

За да извикам ut_sendMsgToHub, използвам брокер на услуги, за да съм сигурен, че всеки проблем с изпълнението на функцията е отделен от съхранените процедури, обработващи данните



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. По-добър начин за анализиране на целочислени стойности от разделен низ на T-SQL

  2. Как да настроите поща на база данни в SQL Server (SSMS)

  3. Кога е по-добре да съхранявате флагове като битмаска, вместо да използвате асоциативна таблица?

  4. Как да върнете резултатите от заявката като списък, разделен със запетая в SQL Server – STRING_AGG()

  5. DATETIME2FROMPARTS() Примери в SQL Server (T-SQL)