さて、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.ServiceModel(互換性がない場合は、C:\ Windows \ assemblyのGACに記載されているバージョンを参照してください)。
- System.Threading
最後にSQLSERVERで:
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を呼び出すには、サービスブローカーを使用して、関数の実行に関する問題がデータを処理するストアドプロシージャから切り離されていることを確認します。