【发布时间】:2020-11-14 16:09:00
【问题描述】:
我在我的 C# 应用程序中使用了 Artalk XMPP nuget 包。我能够通过我们 LAN 上的 Ignite OpenFire 服务器从用户帐户 userA@domain.com 向用户帐户 userB@domain.com 发送消息。这些消息存在几个小问题,这些问题不是最引人注目的:
-
如果我试图提供一个主题,它会在客户端中以“主题:”作为前缀。这不是问题,但我想知道这是远程客户端还是服务器。
-
消息正文被包裹在方括号中作为[测试消息正文]。这不是一个大问题,但我宁愿避免它,以保留按原样发送的消息,以进行可能的自动处理。这是远程客户端还是服务器?
-
如果消息正文包含 XML,则它已成功发送但从未收到。 XMPP 协议不允许发送 XML 吗?还是服务器或远程客户端?
编辑:
由于我问了上面的项目符号,我尝试在消息正文上使用System.Security.SecurityElement.Escape() 并将其包装在<![CDATA[]]> 中,并在保留其XML 的情况下交付。问题仍然存在。
-
userB也将所有成功传递的消息复制回userA。如果userA不是交互式的,这没关系,但如果它也是一个真实的人,那么它可能会很烦人。这是服务器还是远程客户端的事情,有什么办法可以避免吗?我知道远程用户的客户端不会使用通过 Jabber 客户端发送给他们的常规聊天消息来执行此操作。
接下来,我让userB@domain.com 邀请userA@domain.com 到聊天室conference.domain.com@conference.domain.com 并尝试向该聊天室发送消息,仍然来自userA@domain.com。会议室没有收到任何消息,发送过程中也没有抛出异常。
ArtalkXmppClient xmpp;
xmpp = new ArtalkXmppClient("domain.com", "userA@domain.com", "secret", 5222, true);
try
{
var msg = new Message(
"conference.domain.com@conference.domain.com",
"test message body",
"conference subject", // conference allows participants to change subject
null,
MessageType.Groupchat,
CultureInfo.CurrentCulture);
if (!xmpp.Connected)
{
xmpp.Connect("myapp");
}
xmpp.SendMessage(msg);
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
【问题讨论】: