SL4 を使用する Silverlight クライアントと、.NET 4 を使用する C# サーバーがあります。サーバーは、クライアントが接続する予定のポート 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)
{
}
}
新開発 「コネクション確立」発火!
したがって、1 分ほど時間があれば、「ConnectionEstablished」イベントが最終的に発生することがわかりました。しかし、そこから得られるものはそれほど心強いものではありません。
「AccessDenied」の SocketError と「アクセス許可によって禁止されている方法でソケットにアクセスしようとしました。」というメッセージが表示され、予想どおり、サーバーは接続を受け入れません。サーバーのポートが開いていて、接続を受け入れることができることはわかっているので、これは非常に複雑なシナリオです。
誰の助けにも感謝します。