C# 用户';使用Jabbernet进行搜索

C# 用户';使用Jabbernet进行搜索,c#,xmpp,C#,Xmpp,我在正在编写的Jabbernet客户端上添加了以下代码: private void Roster_OnRosterEnd(object sender) { QueryUser(new JID("lixo@icts.br")); QueryUser(new JID("abc@icts.br")); QueryUser(new JID("nilo@icts.br")); QueryUser(new JID("simone

我在正在编写的Jabbernet客户端上添加了以下代码:

    private void Roster_OnRosterEnd(object sender)
    {
        QueryUser(new JID("lixo@icts.br"));
        QueryUser(new JID("abc@icts.br"));
        QueryUser(new JID("nilo@icts.br"));
        QueryUser(new JID("simone@icts.br"));
    }

    private void QueryUser(JID jid)
    {
        IQ search = new IQ(Client.Document);
        search.From = Client.User.ToString() + "@" + Client.Server.ToString();
        search.To = "search." + Client.Server.ToString();
        search.ID = "search2";
        search.Type = IQType.set;
        search.InnerXml = "<query xmlns='jabber:iq:search'><nick>" + jid.User + "</nick></query>";
        Client.Tracker.BeginIQ(search, new jabber.connection.IqCB(OnSearch), jid);
    }

    private void OnSearch(object sender, IQ iq, object data)
    {
        Error err = iq.Error;
        if (err != null)
            Console.WriteLine("Error " + err.Condition + " on querying user " + data);

        if (iq.Query.ChildNodes.Count == 0)
        {
            Console.WriteLine("No answer querying user " + data);
        }

        foreach (Element a in iq.Query) 
        {
            Console.WriteLine("Answer querying user: " + data + " --> " + a.OuterXml);
        } 
    }
private void花名册\u on花名册(对象发送方)
{
QueryUser(新JID)lixo@icts.br"));
QueryUser(新JID)abc@icts.br"));
QueryUser(新JID)nilo@icts.br"));
QueryUser(新JID)simone@icts.br"));
}
私人虚空查询器(JID JID)
{
IQ搜索=新IQ(客户端文件);
search.From=Client.User.ToString()+“@”+Client.Server.ToString();
search.To=“search.”+Client.Server.ToString();
search.ID=“search2”;
search.Type=IQType.set;
search.InnerXml=“+jid.User+”;
Client.Tracker.BeginIQ(搜索,新jabber.connection.IqCB(OnSearch),jid);
}
私有void OnSearch(对象发送方、IQ、对象数据)
{
误差误差=智商误差;
if(err!=null)
Console.WriteLine(“错误”+错误条件+”查询用户“+数据);
if(iq.Query.ChildNodes.Count==0)
{
Console.WriteLine(“无应答查询用户”+数据);
}
foreach(iq.Query中的元素a)
{
Console.WriteLine(“应答查询用户:“+data+”-->“+a.OuterXml”);
} 
}
问题是:无论我尝试了多少次搜索,OnSearch方法只执行一次。我猜我发送的每个搜索都会执行一次该方法

我错过了什么

更新

只是想澄清一下。。。我试图发现用户是否存在,如果存在,我可以发送邀请,这取决于将接收邀请的用户的VCard中包含的字段的内容,并决定是否可以发送邀请

蒂亚,
Nilo

为每个请求使用不同的ID。您的错误在这一行:

search.ID = "search2";
保留一个计数器,或者让IQ构造函数为您生成一个计数器。此外,不必费心设置发件人地址:

search.From = Client.User.ToString() + "@" + Client.Server.ToString();

删除这两行,它应该会起作用。

非常感谢你的回答,乔。用你的小费,事情就行了。我现在面临的问题是:当我搜索“”时,似乎发送到服务器的xml的所有字符都是小写的,如果尼克有大写字母,则在搜索时找不到它。我会做更多的调查,但如果你有其他的建议,我想知道。更新:真正发生的是,对尼克的搜索是区分大小写的。搜索是否不区分大小写?这是服务器供应商的问题。我的服务器是Openfire 3.8.1。为了得到一个快速的解决方案,我将使用所有小写字母强制用户注册。它将解决我的问题,而不需要更多的研究,而研究的时间是我现在没有的。谢谢你的帮助,乔。