Jabber клиент для SQL Server (JabberCLR)

by Admin 1. декабря 2009 23:22

XMPP — Extensible Messaging and Presence Protocol (англ. расширяемый протокол обмена сообщениями и информацией о присутствии), ранее известный как Jabber[1] ([ˈʤæbə(r)], джа́ббер(англ. болтовня, трёп; тарабарщина) — это основанный на XML открытый, свободный для использования протокол для мгновенного обмена сообщениями и информацией о присутствии в режиме, близкому к режиму реального времени.

Изначально спроектированный легко расширяемым, протокол, помимо передачи текстовых сообщений, поддерживает передачу голоса, видео и файлов по сети.

В отличие от коммерческих систем мгновенных сообщений, таких, как AIM, ICQ, MSN и Yahoo, XMPP является децентрализованной, расширяемой и открытой системой. Любой желающий может открыть свой сервер мгновенных сообщений, регистрировать на нём пользователей и взаимодействовать с другими серверами XMPP. На основе протокола XMPP уже открыто множество частных и корпоративных серверов XMPP. Среди них есть достаточно крупные проекты, такие как Google Talk, LiveJournal и Gizmo5. (http://ru.wikipedia.org/wiki/Jabber)

В качестве альтернативного клиента предлагаю CLR-сборку.

Для быстрого написания сборки я воспользовался уже готовой библиотекой XMPP (.NET) - agsXMPP

using System;
using Microsoft.SqlServer.Server;
using agsXMPP;
using agsXMPP.protocol.client;

public class JabberCLR
{
    [SqlFunction]

    public static string SendMessage(string Server, string Username, string Password, string Port, string SendTo, string Message)
    {

        XmppClientConnection xmpp = new XmppClientConnection();
        xmpp.Resource = "JabberCLR";
        xmpp.Server = Server;
        xmpp.Username = Username;
        xmpp.Password = Password;
        xmpp.Port = Convert.ToInt32(Port);

        Message msg = new Message();
        msg.Type = MessageType.chat;
        msg.To = new Jid(SendTo);
        msg.Body = Message;

        xmpp.Open();

        xmpp.OnLogin += delegate(object o){xmpp.Send(msg);};

        return (xmpp.XmppConnectionState.ToString());
    }
}

При регистрации нашей сборки потребуется ещё сама библиотека agsXMPP.dll и System.Drawing.dll (из C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727). Собираем эти 3 библиотеки в одну папку, дабы не получить ошибку подобно этой:

Msg 10301, Level 16, State 1, Line 1 Assembly 'JabberCLR' references assembly 'agsxmpp, version=1.1.0.0, culture=neutral, publickeytoken=ff839b81f1debe86.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2(failed to retrieve text for this error. Reason: 1815)). Please load the referenced assembly into the current database and retry your request.

либо:

Msg 10301, Level 16, State 1, Line 1 Assembly 'JabberCLR' references assembly 'system.drawing, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2(failed to retrieve text for this error. Reason: 1815)). Please load the referenced assembly into the current database and retry your request.

После этого регистрируем сборку на сервере БД:

CREATE ASSEMBLY [AssemblyJabber]
AUTHORIZATION [dbo]
FROM 'C:\CLR\JabberCLR.dll'
WITH PERMISSION_SET = UNSAFE
GO

Создаём скалярную функцию с ссылкой на нашу сборку:

CREATE FUNCTION [dbo].[SendMessage]
(
@Server [nvarchar](128),
@Username [nvarchar](128),
@Password [nvarchar](128),
@Port [nvarchar](5),
@SendTo [nvarchar](128),
@Message [nvarchar](max)
)
RETURNS [nvarchar](50) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [AssemblyJabber].[JabberCLR].[SendMessage]
GO

Ну и сам вызов функции (отправка сообщения):

SELECT [dbo].[SendMessage] (
--Любой сервер Jabber
'jabber.ru',
--JID от кого шлём сообщения
'MyUser',
--Пароль нашей учётки
'MyPassword',
--Порт на сервере
'5222',
--Получатель сообщения
'mssql@jabber.ru',
--Само сообщение
'TestMessage')
GO

Таким образом можно отсылать через XMPP-протокол сообщения, например о каком-либо событии на сервере БД. Сборка писалась под Framework v3.5 для SQL Server 2008.

P.S.: Не забываем про

SP_CONFIGURE 'clr enabled', 1
RECONFIGURE
ALTER DATABASE [Ваша база] SET TRUSTWORTHY ON

 

Ниже представлен список библиотек, реализующих протокол Jabber/XMPP на разных языках программирования.

Библиотеки XMPP

Tags: , ,

SQL Server

Добавить комментарий

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading