У меня есть клиент silverlight, использующий SL4, и сервер C #, использующий .NET 4. Сервер открывает порт на 4525, к которому должен подключаться клиент. Теперь, если я могу попросить вас просто прочитать следующее, мы, вероятно, сможем избежать необходимости публиковать какой-либо дополнительный код:
Клиент пытается установить соединение с сервером, открывает соединение для файла политики, запрашивает файл политики и возвращает файл политики. Чего не происходит, так это события 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
Всем спасибо за уделенное время, уверен, кто-нибудь сможет помочь.
Запрос кода Клиентское соединение
Не уверен, что это имеет какие-либо дальнейшие последствия для поиска ответа; но:
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» и сообщение «Была сделана попытка получить доступ к сокету способом, запрещенным его разрешениями на доступ», и, как и следовало ожидать, мой сервер никогда не принимает соединение. Я знаю, что у сервера открыт порт и он может принимать соединение, так что это довольно сложный сценарий.
Еще раз спасибо за любую помощь.