1

我正在开发 WinRT(Windows8 Release Preview)。我有一个 Web 应用程序(实际上是一个更简单的 XMPP 客户端)。

我主要使用 StreamSocket 类来连接 Jabber Server。它给了我一个好的开始。但是当我尝试升级已经连接的套接字以使用 SSL 时遇到了一个问题。

我使用StreamSocket.UpgradeToSslAsync来实现它。它抛出这样的异常

在意外的时间调用了一个方法。(来自 HRESULT 的异常:0x8000000E)

我不知道为什么会这样。我已经完成了上面链接的所有事情。我已经创建成功连接的套接字。我可以从 Jabber 服务器接收一些 xml 节。这是运行时的图片。![在此处输入图片描述][1]

您可以在新选项卡中看到图片。

当我单击 UpToSSL 按钮时,它会崩溃并抛出上述异常。

这是更简单的版本代码:

 // xmpp is my  CXMPP  client class
 private void StartTlsBtn_Click(object sender, RoutedEventArgs e)
 {
   xmpp.SendXml("<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls' />");            
 } 
 // it works fine, and i have got the reponse from server:
 //     <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
 // next step i should upgrade my sockey connection to ssl

    private void UpSslBtn_Click(object sender, RoutedEventArgs e)
    {
      xmpp.UpToSsl();         
    }

    async public void UpToSsl()
    {
        SendEvent.WaitOne();
        SendEvent.Reset();

        // private StreamSocket ClientSock;
        await ClientSock.UpgradeToSslAsync(SocketProtectionLevel.Ssl, ClientSock.Information.RemoteHostName);
        isSsl = true;
        SendEvent.Set();
    }  

请给我一些提示。谢谢你。

4

1 回答 1

1

我也在为 Metro 开发 XMPP 应用程序,服务器连接和协议解析器已准备好。

我正在使用三个 ManualResetEvents,因此 Send、Receive 和 Elevate 不会发生冲突。还要小心,因为 UpgradeToSslAsync 不接受自签名证书,在这种情况下会抛出异常。

我真的很想进一步帮助你,但我试着用这个来资助自己,XMPP 库将在应用程序在商店发布后发布

于 2012-06-17T17:46:09.623 回答