1

RDPViewerがRDPSessionに接続するデスクトップ共有ソリューションを正常に作成しました。それはすべて美しく機能しています。ただし、今は逆の動作を試みています。RDPViewerのStartReverseConnectListenerメソッドとRDPSessionのConnectToClientメソッド(セッション側がビューア側に接続してNAT /ファイアウォールの問題を回避する)を使用します。主にhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa373359%28v=vs.85%29.aspxで概説されている手順に従いました。

  1. ビューアは、StartReverseConnectListenerメソッドを呼び出し、bstrConnectionString、bstrUserName、およびbstrPasswordパラメーターにNULLを渡すことにより、接続文字列を取得します。

  2. ビューアは、StartReverseConnectListenerメソッドを呼び出して、逆接続リスナーを開始し、pbstrReverseConnectStringパラメーターにNULLを渡し、bstrConnectionString、bstrUserName、およびbstrPasswordパラメーターに有効な値を渡します。

  3. ビューアーは、ステップ1で取得した接続文字列を共有者に送信します。

C#2010を使用して、RDPSession側で次のことを行いました。

RDPSession session = new RDPSession();
session.Open();
session.Invitations.CreateInvitation(null, "test", "12345", 1);

次に、RDPViewer側で、次のことを行いました。

string reverseConnectString = axRDPViewer1.StartReverseConnectListener(null, null, null);

(上記のステップ1)

axRDPViewer1.StartReverseConnectListener(reverseConnectString, "test", "12345");

(上記のステップ2)

次に、RDPSession側に戻って、ビューアから取得したreverseConnectStringを使用して接続を試みます(実際に文字列をファイルに保存してから、RDPSession側にロードしました)。

session.ConnectToClient(reverseConnectString);

(上記のステップ3)

このメソッドを実行するとすぐに、RDPViewer側が1798のエラーで切断されます。これは、http://msdn.microsoft.com/en-us/library/aa373802%28VS.85%29.aspxによるとのことを意味します。

ServerCertificateUnpackErr 1798

サーバー証明書の解凍に失敗しました。

明らかな何かが欠けているような気がしますが、何がわからないのです。

助言がありますか?

ありがとう!

4

1 に答える 1

3

リバース接続に関しては、Microsoftのドキュメントはすべて間違っています。これがあなたがする必要があることです(上記のあなたのコードから適応されました):

RDPセッション側:

RDPSession session = new RDPSession(); 
session.Open(); 
string hostConnString = session.Invitations.CreateInvitation(null, "My Group Name", "12345", 1);

RDPViewer側(セッション側で取得された値と同じ値である必要があることに注意してhostConnStringください):

string viewerConnString = axRDPViewer1.StartReverseConnectListener(hostConnString, "My Name", "12345");

ここで、RDPセッション側に戻ります(は、ビューア側から取得した値と同じである必要があることに注意してviewerConnStringください)。

session.ConnectToClient(viewerConnString); 

そして、それはそれを行う必要があります。注意すべき点がいくつかあります。CreateInvitationで指定されたグループ名は、他の場所と一致する必要はありません。プログラムでホストが開始した招待状を列挙する必要がある場合は、参照用にすぎないと思います。StartReverseConnectListenerに渡されるユーザー名は、任意の名前にすることもできます。これは、インターフェイスのRemoteNameプロパティを確認することで、ホスト側で問い合わせて使用​​できます。IRDPSRAPIAttendee

于 2012-04-12T22:20:44.650 に答える