2012-05-10 15 views
0

私はSL4を使用しているSilverlightクライアントと.NET 4を使用しているC#サーバーを持っています。サーバーは、クライアントが接続しようとしているポート4525を開きます。今度は次のコードを読んでもらうことを頼むことができれば、コードを投稿する必要がなくなります。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 

ありがとうございました。誰かが助けてくれると確信しています。

コード要求 クライアント接続それが答えを見つけるに向けた任意の更なる結果のだということを

わかりません。しかし:

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と「アクセス許可で禁止されている方法でソケットにアクセスしようとしました」というメッセージが表示されました。予想通り、私のサーバーは接続。私は、サーバーがポートを開いていることを知っており、接続を受け付けることができるので、これは非常に複雑なシナリオです。

誰もが助けてくれてありがとう。

+0

Silverlightアプリケーションをサーバーに接続するために使用しているシステムがわからなければ、難しいと言えます。 – Trisped

+0

「システム」とは何を意味していますか?私はWindows 7環境、クライアントとサーバーで動作しています。 Chromeはクライアントを実行しています。 Serverは、Policy Serverと 'Real' Serverの両方のTcpListenerを開きます。 – DigitalJedi805

+0

他に何を知りたいですか? – DigitalJedi805

答えて

2

試してみてください。ConnectAsyncがfalseその後返した場合

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); 

     if(!socket.ConnectAsync(connectEventArgs)) 
     { 
      ConnectionEstablished(/*Insert Args*/); //Handle real time execution 
     } 
    } 
    catch (Exception e) 
    { 
     //write error somewhere 
    } 
} 

documentationを示し、「Eパラメータで渡されたSystem.Net.Sockets.SocketAsyncEventArgsオブジェクト上SocketAsyncEventArgs.Completedイベントが発生しません。」

また、どこかで例外を記録していることを確認してください。あなたが過去にあわてているだけの例外があるかもしれません。

更新

  • あなたはClientAccessPolicy.xmlファイルをチェックしましたか?すべての "と"の文字を "で置き換える必要があります。
  • ConnectAsync(connectEventArgs)コールの前にconnectEventArgs.UserToken = socket;を追加しようとしましたか?
  • サーバーが要求を受信し、応答を送信していますか(クライアント上でを使用する必要があります)?
  • デバッグ中にconnectEventArgs.Completedが正しい方法を指していますか?
  • デバッグ中に、メソッドが戻るまで「ステップオーバー」(F10)したらどうなりますか?他の方法が呼ばれていますか?
  • デバッグ中に、[ステップオーバー](F10)socket.ConnectAsync(connectEventArgs)(まだ方法にあります)の場合は、[デバッグ]> [Windows]> [スレッド]ウィンドウに他のスレッドがありますか?他のスレッドに切り替えると(スレッドを右クリックして「スレッドに切り替え」を選択するか、スレッドをダブルクリックすると)、どうなりますか?

状況がどのようになっているか教えてください。

+0

この仕様に変更され、デバッグでは、 '!socket.ConnectAsync()'にヒットし、(このロジックの)「偽」評価を受け取り、引き続き戻ります。 (ConnectAsyncがtrueを返す) – DigitalJedi805

+0

@ DigitalJedi805追加のトラブルシューティングオプションを追加しました。 – Trisped

+0

@ DigitalJedi805申し訳ありませんが、あなたのアップデートを逃しました。 Wiresharkを使用して、提供しているClientAccessPolicyに一致するネットワーク設定を確認することをお勧めします。 – Trisped

関連する問題