У меня есть клиент silverlight, используя SL4 и сервер C#, используя .NET 4. Сервер открывает порт на 4525, к которому предназначен клиент для подключения. Теперь, если я могу попросить, чтобы вы просто прочитали следующее, мы, вероятно, можем избежать необходимости отправлять любой дополнительный код:Почему мой файл политики Socket Silverlight не работает?
Клиент пытается установить соединение с сервером, открывает соединение для файла политики, запросы файл политики и получает файл политики. Что не происходит, это событие onConnect в клиенте. Прежде чем я включил сервер политик, клиент подключился бы на 4525 и выполнил бы событие onConnect, но сразу же потерпит неудачу, потому что не было сервера политики. Теперь, когда я реализовал сервер политики, кажется, что он никогда не обнаруживает завершение его доставки.
Вот резюме передачи:
Client:
<policy-file-request/>
Server:
<?xml version="1.0" encoding ="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from>
<domain uri="*:4525" />
</allow-from>
<grant-to>
<socket-resource port="4525" protocol="tcp" />
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
Эффективно; единственный вопрос, на который я пытаюсь ответить, заключается в следующем: я что-то упустил из своего файла политики или мне нужно каким-либо образом завершить его представление клиенту, чтобы мой клиент обнаружил его доставку?
Things of note:
The Client successfully establishes its connection to the policy server
The policy server successfully writes the policy back to the client
The 'real' servers port is successfully opened
The client 'can' connect to the 'real' server
Спасибо вам всем за ваше время, я уверен, что кто-то сможет вам помочь.
Код запрос Client Connection
Не уверен, что это какие-либо дальнейших последствий в стороне найти ответ; но:
private static DnsEndPoint IP_END_POINT = new DnsEndPoint("192.168.0.36", 4525, AddressFamily.InterNetwork);
public MainPage()
{
try
{
InitializeComponent();
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketAsyncEventArgs connectEventArgs = new SocketAsyncEventArgs();
connectEventArgs.RemoteEndPoint = IP_END_POINT;
connectEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(ConnectionEstablished);
socket.ConnectAsync(connectEventArgs);
}
catch (Exception e)
{
}
}
Новостройка'Соединение установлено' пожары!
Получается, что если я хочу минуту или около того, мое событие ConnectionEstablished в конечном итоге срабатывает. Однако то, что я получаю от этого, не настолько обнадеживает.
В итоге у меня возникла проблема с SocketError 'AccessDenied' и сообщение «Попытка получить доступ к сокету запрещена правами доступа». Как и следовало ожидать, мой сервер никогда не принимает подключение. Я знаю, что сервер имеет открытый порт и может принимать соединение, поэтому это довольно запутанный сценарий.
Еще раз спасибо за помощь.
Трудно сказать, не зная, какую систему вы используете для подключения приложения Silverlight к серверу. – Trisped
Что значит «система»? Я работаю в среде Windows 7, клиенте и сервере. Chrome работает с клиентом. Сервер открывает TcpListener как для сервера политик, так и для «реального» сервера. – DigitalJedi805
Что еще вы хотели бы узнать? – DigitalJedi805