iOS でチャット アプリケーションを開発しており、API は Windows サーバー上にあります。サーバーに ejabbered がインストールされており、agsXMPP を使用して C# から正常に接続できます。
問題は、毎回ユーザーを登録できないことです。正常に実行される場合と実行されない場合があります。以下はコードです:
static ManualResetEvent done = new ManualResetEvent(false);
public void Login()
{
XmppClientConnection xmpp = (XmppClientConnection)Application["xmpp"];
try
{
if (xmpp == null)
{
xmpp = new XmppClientConnection();
Application["xmpp"] = xmpp;
}
xmpp.OnLogin += new ObjectHandler(xmpp_OnLogin);
xmpp.OnError += new ErrorHandler(xmpp_OnError);
xmpp.AutoPresence = true;
xmpp.AutoResolveConnectServer = false;
xmpp.Port = 5222;
xmpp.UseSSL = false;
xmpp.ConnectServer = "127.0.0.1";
xmpp.Server = "plutus-pc1";
xmpp.Username = "admin";
xmpp.Password = "p@ssword";
xmpp.KeepAlive = true;
xmpp.Open();
done.WaitOne();
Register();
}
catch (Exception ex)
{
xmpp.Close();
}
}
void xmpp_OnError(object sender, Exception ex)
{
XmppClientConnection xmpp = (XmppClientConnection)Application["xmpp"];
xmpp.Close();
}
void xmpp_OnLogin(object sender)
{
done.Set();
}
protected void cmdLogout_Click(object sender, EventArgs e)
{
XmppClientConnection xmpp = (XmppClientConnection)Application["xmpp"];
xmpp.Close();
}
public void Register()
{
try
{
XmppClientConnection xmpp;
xmpp = (XmppClientConnection)Application["xmpp"];
if (xmpp == null)
{
xmpp = new XmppClientConnection();
Application["xmpp"] = xmpp;
}
xmpp.AutoPresence = true;
xmpp.AutoResolveConnectServer = false;
xmpp.Port = 5222;
xmpp.UseSSL = false;
xmpp.ConnectServer = "127.0.0.1";
xmpp.Server = "plutus-pc1";
xmpp.Username = "user1";
xmpp.Password = "p@ssword1";
xmpp.RegisterAccount = true;
xmpp.OnRegisterError += xmpp_OnRegisterError;
xmpp.OnRegistered += xmpp_OnRegistered;
xmpp.Open();
//done.WaitOne();
}
catch (Exception ex)
{
}
}
void xmpp_OnRegistered(object sender)
{
}
void xmpp_OnRegisterError(object sender, agsXMPP.Xml.Dom.Element e)
{
//throw new NotImplementedException();
}
登録が失敗すると、さまざまなエラーが発生します。
- agsXMPP.Xml.Xpnet.InvalidTokenException
- タイプ「agsXMPP.protocol.stream.feature.Register」のオブジェクトをタイプ「agsXMPP.protocol.Stream」にキャストできません
- トランスポート接続からデータを読み取れません: 破棄されたオブジェクトにアクセスできません。\r\nオブジェクト名: 'System.Net.Sockets.Socket'
コードを変更していないにもかかわらず、異なるエラーが発生する