खैर, मुझे SignalR.Client.NET.35 लाइब्रेरी के बारे में कुछ देर से पता चला।
लिखते समय, इसे NuGet में पैक नहीं किया गया है, इसलिए कोड डाउनलोड GitHub सिग्नलआर प्रोजेक्ट साइट से और समाधान के लिए एक प्रोजेक्ट के रूप में जोड़ा गया (दोनों 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 सर्वर 2008R2 CLR लाइब्रेरी के साथ आपको निम्नलिखित dll को एक ही फ़ोल्डर में रखना होगा:
- Newtonsoft.Json
- SignalR.Client.Net35 स्पष्ट रूप से
- एसएमडायग्नोस्टिक्स
- System.Runtime.Serialization
- System.ServiceModelसही संस्करण में (असंगतता के मामले में C:\Windows\assembly में GAC में बताए गए संस्करण को देखें)।
- सिस्टम.थ्रेडिंग
अंत में SQL सर्वर में:
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 को कॉल करने के लिए मैं एक सर्विस ब्रोकर का उपयोग करता हूं ताकि मुझे यकीन हो कि फ़ंक्शन के निष्पादन में कोई भी समस्या डेटा को संसाधित करने वाली संग्रहीत प्रक्रियाओं से अलग हो जाती है