- - PR -
.NET リモート、クライアント起動オブジェクト (CAO) について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-09-16 16:09
「 MSDN フォーラム 」にも投稿させて頂いておりますが、
取り急ぎの為、「@IT会議室」にも投稿させて頂いております。 ご了承ください。 VisualStudio2008で、.netリモーティングのクライアント起動オブジェクト (CAO) を使用し、 サーバー/クライアント間のリモート処理を構築しようとしています。 サーバーと、クライアントが同一ドメイン内であれば、問題なく実行できるのですが、 サーバーと、クライアントが異なるドメインのとき、「remoteObject = New Core()」を実行し クライアントにインスタンスを作成しようとすると、「サーバーは、クライアントの資格情報を拒否しました。」と、 エラーが返り、対応に困っております。 原因は、サーバーとクライアントが別のドメインに参加している為だと、思うのですが、 対処法を見つける事ができません。 作業環境は下記の通りです。 どなたか、対処法をご存じの方がいらっしゃいましたら、ご教示ください。 よろしくお願い致します。 社内ネットワーク上に、@ドメインとAドメインが存在しています。 @ドメイン配下には、Aサーバー(Windows server2003 Service Pack 1)と、BクライアントPC(Xp sp2)が、 Aドメイン配下には、CクライアントPC(Xp sp2)が存在します。 リモートコンソールアプリ(サーバー用)を起動し待機状態にしていいるAサーバーに、 B、Cよりリモートアクセスを実行します。 A、B間は、同一ドメイン内の為、問題なく接続できますが、 A、C間は、ドメインが異なる為か、「サーバーは、クライアントの資格情報を拒否しました。」 と云うメッセージが返され接続ができません。 サーバ側コード: Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Channels.Tcp Imports System.Runtime.Remoting.Services Imports TEST.Core Module RemotingServer Sub Main() ' TcpChannelシンクチェーンのためにカスタムフォーマッタを作成 Dim provider As New BinaryServerFormatterSinkProvider() provider.TypeFilterLevel = Runtime.Serialization.Formatters.TypeFilterLevel.Full ' ポートをチャンネルインスタンスの上に置くためにIDictionaryをつくる Dim props As IDictionary = New Hashtable() props("port") = 2501 ' サーバチャネル生成 Dim chnl As TcpChannel chnl = New TcpChannel(props, Nothing, provider) ' チャネル登録 ChannelServices.RegisterChannel(chnl, True) ' サービスタイプを登録 RemotingConfiguration.RegisterActivatedServiceType(GetType(Core)) RemotingConfiguration.ApplicationName = "SampleApp" ' 待機処理 Console.WriteLine("Hit <enter> to exit...") Console.ReadLine() End Sub End Module クライアント側コード: Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Channels.Tcp Imports TEST.Core Namespace RemotingClient Public Partial Class Form1 Inherits Form Private remoteObject As Core Private Sub Form1_Load(sender As Object, e As EventArgs) ' クライアントチャネルのみアクティブなTcpChannelインスタンス生成 Chan = New TcpChannel(0) ' チャネル登録 ChannelServices.RegisterChannel(Chan, True) ' リモートで使用するオブジェクトを指定 RemotingConfiguration.RegisterActivatedClientType(GetType(Core),"tcp://[IPアドレス]:[ポート番号]/SampleApp") ' インスタンスを作成 remoteObject = New Core() End Sub End Class End Namespace | ||||
|
投稿日時: 2008-09-16 23:13
MSDNフォーラムで話が進行しているようですので、誘導しておきます。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=3880702&SiteID=7 | ||||
|
投稿日時: 2008-09-18 09:20
根本的な解決には至っておりませんが、下記の設定で、今回は逃げる事に致しました。
ありがとうございました。 @ サーバー/クライアント共にコードを 「ChannelServices.RegisterChannel(Chan, True)」から 「ChannelServices.RegisterChannel(Chan, False)」に変更 A サーバーをドメインから外し、ワークグループに変更 @のみだと、クライアントで「remoteObject = New Core()」が実行されると、 応答が返ってこななってしまいました。(エラーすら発生しません) | ||||
|
投稿日時: 2008-09-18 12:41
議題と全然関係ないんですが、Azuleanさんがなさっている別サイトへの誘導って、すごくいいですよね。好感触〜です。
私も以前複数サイトに同じ質問を投げたことがあったのですが、質問場所は一箇所にしろだの何だの、嫌なことを書かれた記憶があります。 私は分からなくて困っているんだし、色々な人から意見を聞きたいと思って複数サイトに投稿しているのに!って感じでした。 以上、脱線話ですいませんでしたー。 | ||||
|
投稿日時: 2008-09-18 23:57
本筋と関係ないですが、誤解されているようなので念のため。
私も基本的に同じ質問を複数箇所に書くな、書くのであればちゃんとフォローしろというスタンスに賛同している人です。 複数のサイトで質問すること自体は否定しませんが、せめてどこで質問しているかを明示すること(URLもあると望ましい)、解決した際には全てのサイトに結果をフォローすることをお願いしたいところです。 そうしないと、別々の場所で同じ回答がついて、回答側と質問側それぞれで無益なやりとりが行われます。 例えば、サイトAで効果がなかった回答を受けたとして、サイトBで別の人から再度同じ回答が寄せられた場合、質問者は「既に試したけれど、それではうまくいかなかった。」という風にレスをつける時間のロス、お互いに不機嫌になるといった状態になります。 逆に、回答側は、別のサイトで特定のやりとりがあったことを知っていれば、また違った視点での回答を示してくれることを期待できます。 質問者側にもメリットが出てくるはずなので、心にとめておいて頂ければと思います。 (回答に至るまでのトータルの時間が削減できる可能性がある) [ メッセージ編集済み 編集者: Azulean 編集日時 2008-09-19 00:01 ] | ||||
|
投稿日時: 2008-10-03 22:23
では、次からあなたがやってください |
1