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