【发布时间】:2011-09-12 14:51:49
【问题描述】:
所以我一直在努力寻找一个体面的 C# 库来与 XMPP 一起使用,该库支持客户端和服务器之间的 SSL 或 TSL 加密。我希望有人可以推荐我的图书馆,以满足我的一些需求并且得到很好的支持/记录。另外,也许有人可以证实我对我已经尝试过的一些库的怀疑。
我的第一次尝试是使用 Soapbox Studio SDK。 Found here from Conversant,但是据我所知,他们只支持 SASL 身份验证。我试图联系他们,但没有收到任何回复,而且那里的论坛似乎无法正常工作,因为我无法在他们的论坛上发布我的问题。也许我对 Soapbox 库的 SSL 假设是错误的,如果有人能纠正我,那就太好了,因为那是我更喜欢使用的库。
接下来我转到了 Matrix,它是 agXmpp 的继任者。在浏览了他们的留言板并浏览了他们的示例应用程序几天后,我什至无法在我的 openfire 服务器上创建群聊。几乎所有在ag Software formum 上发布的相关问题都会引导人们使用他们的示例应用程序来回答他们的问题。但是,除非我误解了某些东西,否则他们的许多示例应用程序似乎已经过时或不适合我的需要。以下代码是我尝试使用他们的库创建群聊的示例。如果有人使用过他们的图书馆,也许他们可以指出我做错了什么。
这些是我的使用指令
using System;
using Matrix.Xmpp.Disco;
using Matrix.Xmpp.Client;
using Matrix.Xmpp.Session;
using Matrix.Xmpp;
using Matrix;
这是连接到 Xmpp 客户端的代码
readonly XmppClient _xmppClient = new XmppClient();
public string Connect() {
try
{
_xmppClient.SetUsername(OPENFIRE_USER_NAME);
_xmppClient.Password = OPENFIRE_PASSWORD;
_xmppClient.SetXmppDomain(OPENFIRE_SERVER);
_xmppClient.Show = Matrix.Xmpp.Show.chat;
_xmppClient.AutoRoster = true;
_xmppClient.Open();
return "Connection Succesful";
}
catch (Exception ex)
{
_logger.LogError("SessionManager", "Connect", "Could not connect to Openfire Server", ex.ToString());
return "Could not Connect to Openfire Server";
}
}
这是用来创建新聊天室的代码
public string CreateRoom(string roomName, string serverName, string userName)
{
Jid groupJid = new Jid(userName, serverName, "gec2o");
using (MucManager mucManager = new MucManager(_xmppClient))
{
mucManager.EnterRoom(groupJid, roomName, true);
mucManager.RequestInstantRoom(groupJid);
}
return "";
}
但是服务器上没有创建聊天室,也没有抛出异常。另外我知道我可以使用他们的库连接到我的服务器,因为我可以看到我的登录名出现在 openfire 的用户列表中。虽然他们将所有类都记录在一个文件中,但该库很少或根本没有提供关于每个类/方法的实际作用以及应该如何使用它的 cmets。再一次,论坛主要告诉人们查看示例代码,这在很大程度上没有帮助,就像肥皂盒一样,这个库似乎没有得到很好的支持(看起来就像一个开发人员回答了一个问题)。
我简要查看了其他库,例如 jabber-net,但在支持和文档方面,这似乎与 Soapbox 和 Matrix 相同。
我也遇到了IP*Works Internet Toolkit,但那个库似乎有点成本过高。
我意识到我在整个问题中做了很多假设,但我已经研究了几天,这是我能够得出的最好的结论。我希望有人可以纠正我的假设或推荐一个不会出现我一直面临的这些问题的库。
【问题讨论】:
-
MatriX 可以很好地解决这个问题,我对 OpenFire 也是如此。您可以发布打开 XmppClient 连接的代码部分吗?
-
@jlew 我刚刚在我的问题中包含了显示连接的代码。