2015-11-05 103 views
1

當某行被插入特定表中時,我必須從SQL Server發送Google Client Messaging(GCM)通知。SQL Server 2012 CLR創建程序集時出錯

我創建了一個Service Broker來管理我的表中的隊列等,我在插入操作中使用了一個觸發器來爲我的隊列添加一個「工作」。

我希望我的Service Broker調用CLR過程來發送GCM通知,並在Visual Studio中創建它。

我的問題是,當我嘗試在SQL Server中創建程序集時,出現很多錯誤,並且似乎需要很多其他框架DLL(例如System.Runtime ...等)。

有誰能告訴我爲什麼?有什麼建議麼?

在此先感謝

+0

SQL CLR只有已經引用的程序屈指可數。您必須添加此程序集依賴的所有程序集才能使SQL CLR接受程序集。 – willaien

+0

您使用HTTP還是XMPP?我假設你的SQL Server是「應用服務器」? –

+0

我使用HTTP ans SqlServer是應用程序調用的服務器。我需要從服務器發送GCM通知到應用程序 – Badozvora

回答

1

SQLCLR是一個非常有限/有限的環境。 Supported .NET Framework Libraries的MSDN頁面列出了可以保證工作的DLL。如果您的項目正在引用不在該列表中的DLL,那麼您將不得不嘗試手動加載它。但是,這並不保證能夠正常工作,或者如果能夠正常工作,則不能保證在.NET Framework或SQL Server的更新中繼續工作。有關SQL Server的CLR主機內工作的細微之處多了很多細節,請參見下面的文章,我寫的(需要免費註冊爲該網站):

Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)

現在看來,你是試圖使用谷歌Clould(不是客戶端)消息:Overview。從該文檔中我可以看到,與GCM連接服務器進行通信的最簡單和最穩定的方法是使用HTTP協議,手動構建JSON(這應該很容易),並使用HttpWebRequest來調用GCM服務器。

我建議「手動」構建JSON的原因是因爲存在System.Runtime.Serialization.dllDataContractJsonSerializer這是不支持.NET框架的圖書館之一(如前所述)。由於您已經在使用HTTP,因此您只需要移除.NET JSON序列化,並使用StringBuilder來構建它。不要忘記從您的項目中刪除對System.Runtime.Serialization的引用。

我對這些問題的答案一些額外的信息: