使用StreamSocket升级到SSL

时间:2012-06-15 07:51:12

标签: c# ssl xmpp windows-runtime microsoft-metro

我正在研究WinRT(Windows8 Release Preview)。我有一个Web应用程序(事实上,一个更简单的XMPP客户端)。

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

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

  

在意外时间调用了一个方法。 (HRESULT的例外情况:   0x8000000E)

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

您可以在new tab

中查看图片

当我单击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();
    }  

请给我一些提示。谢谢。

1 个答案:

答案 0 :(得分:1)

我正在研究Metro的XMPP应用程序,服务器连接和协议解析器已准备就绪。

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

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