Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đẩy dữ liệu từ SQL Server sang Ứng dụng web bằng SignalR

Chà, tôi nhận ra hơi muộn về thư viện SignalR.Client.NET.35.

Tại thời điểm viết bài, nó không được đóng gói trong NuGet, vì vậy mã phải được tải xuống từ Trang web Dự án GitHub SignalR và được thêm làm dự án vào giải pháp (cả SignalR.Client.NET SignalR.Client.NET35 bắt buộc).

Đây là giải pháp cuối cùng, trong trường hợp nó có thể giúp ai đó trong tương lai:

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

Điều quan trọng cần lưu ý:cùng với thư viện SQL SERVER 2008R2 CLR đã biên dịch, bạn sẽ phải đặt các hình nền sau trong cùng một thư mục:

  • Newtonsoft.Json
  • Rõ ràng là SignalR.Client.Net35
  • SMdiagnostics
  • System.Runtime.Serialization
  • System.ServiceModelin phiên bản phù hợp (tham khảo phiên bản được nêu trong GAC trong C:\ Windows \ assembly trong trường hợp không tương thích).
  • System.Threading

cuối cùng trong 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 

Để gọi ut_sendMsgToHub, tôi sử dụng một nhà môi giới dịch vụ để tôi chắc chắn rằng bất kỳ vấn đề nào với việc thực thi hàm đều được tách khỏi các thủ tục được lưu trữ để xử lý dữ liệu



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật một bước công việc cho một công việc đại lý máy chủ SQL (T-SQL)

  2. Thêm một hàng tóm tắt với tổng số

  3. Giới thiệu Tính năng mới - Báo cáo đám mây Spotlight

  4. Trả lại danh sách email được gửi từ thư cơ sở dữ liệu SQL Server (T-SQL)

  5. C # / SQL:sao lưu và khôi phục bằng cách sao chép và thay thế các tệp cơ sở dữ liệu?