Исключение при отказе в доступе при попытке открыть сокет в Silverlight - PullRequest
0 голосов
/ 21 июня 2011

При попытке открыть сокет я получаю исключение Access Denied.Моя функция подключения выглядит следующим образом.

internal void Connect()
        {
            try
            {
                //AccessPolicy = new SocketClientAccessPolicyProtocol();


                args = new SocketAsyncEventArgs();


                args.UserToken = socket;
                args.RemoteEndPoint = endPoint;
                args.Completed += new EventHandler<SocketAsyncEventArgs>(OnConnect);

                **isConnected = socket.ConnectAsync(args);**
                //autoEvent.WaitOne();

                if (args.SocketError != SocketError.Success)
                    throw new SocketException((int)args.SocketError);
                if(isConnected)
                global::System.Windows.MessageBox.Show("Connected");
            }
            catch (Exception ex)
            {
                global::System.Windows.MessageBox.Show(ex.Message);
            }
        }

Функция ConnectAsync выполняется нормально, поскольку isConnected выполняется, но сокет не подключается.

Ответы [ 2 ]

0 голосов
/ 21 июня 2011

Если это Silverlight в браузере, вам нужен сервер политики сокетов в миксе.Подробнее см. http://msdn.microsoft.com/en-us/library/cc645032%28v=vs.95%29.aspx.

0 голосов
/ 21 июня 2011

http://drdobbs.com/windows/208403238

Просматривая код, вы увидите, что он использует класс TcpListener для прослушивания входящих клиентских подключений. Когда клиент подключается, код проверяет запрос на следующее значение: <policy-file-request/>

Silverlight автоматически отправляет этот текст в сокет файла политики после подключения. Если запрос содержит правильное значение, код записывает содержимое политики клиентского доступа обратно в поток клиента (см. Метод OnReceiveComplete ()). После получения файла политики Silverlight анализирует его, проверяет, разрешает ли он доступ к нужному порту, и затем принимает или отклоняет вызов сокета, который приложение пытается выполнить .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...