- - PR -
.NET Remoting IISをホストとする設定ファイルについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-03 23:54
お世話になっております。
VB2005で.NET Remotingを使用した開発を行っています。 構成ファイルを使用してIISをホストとする設定を行いたいのですが、 以下例外が発生し正常動作することができません。 コンソールアプリを作成しtcpでの設定では正常に動作しました。 ConfigurationErrorsException 現在の構成システムでは、ユーザーによってスコープされた設定はサポートされません。 -- 構成 ----------------------- インターフェイス: Public Interface IRemote1 Public Interface IRemote2 クライアント設定ファイル: <system.runtime.remoting> <application> <client> <wellknown type="XXX.IRemote1, XXX" url="http://localhost/test/MyApp1.soap"/> <wellknown type="XXX.IRemote2, XXX" url="http://localhost/test/MyApp2.soap"/> </client> </application> </system.runtime.remoting> サーバクラス: XXX.RemoteClass1 XXX.RemoteClass2 サーバ設定ファイル(Web.config): <configuration> <system.runtime.remoting> <application> <service> <wellknown mode="SingleCall" type="XXX.RemoteClass1, XXX" objectUri="MyApp1.soap"/> <wellknown mode="SingleCall" type="XXX.RemoteClass2, XXX" objectUri="MyApp2.soap"/> </service> </application> </system.runtime.remoting> </configuration> 考えられる原因など、ご教授いただければと思います。 以上、よろしくお願いいたします。 | ||||
|
投稿日時: 2007-01-04 10:08
ユーザースコープの設定として認識されちゃってる箇所があるっぽいですねぇ・・・。ぱっと見、クライアント設定ファイルにルート要素 <configuration> の記述がないのが気になりますがどうでしょうか?
いきなり <system.runtime.remoting>要素が登場するから、これがユーザースコープの設定と認識されちゃうのかも ところで、コンソールアプリはこのクライアント設定ファイルを読み込んだ上で正常動作したのですか? | ||||
|
投稿日時: 2007-01-04 11:28
回答ありがとうございます。
クライアント設定ファイルに<configuration>タグは記述しています。ユーザセッティングも設定している関係でRemotingに関係する箇所のみ記述していました。 以下の形式で記述していますが、Remotingを挿入する箇所がおかしいのでしょうか? <configuration> <configSections> ・・・ </configSections> <system.runtime.remoting> ・・・ </system.runtime.remoting> <userSettings> ・・・ </userSettings> </configuration> コンソールアプリは、クライアントのURL、サーバのobjectUri、<channels>を以下のように変更して実行しました。 クライアント:URL 前 http://localhost/test/MyApp1.soap http://localhost/test/MyApp2.soap 後 tcp://localhost:8085/MyApp1 tcp://localhost:8085/MyApp2 サーバ:objectUri 前 MyApp1 MyApp2 後 MyApp1.soap MyApp2.soap 以下追加 <channels> <channel ref="tcp" port="8085" /> </channels> | ||||
|
投稿日時: 2007-01-04 14:06
うちでやってるIISでのリモーティングの設定(1.1ですが)と比べてみると
・サーバ側<channels>要素の中に<channel ref="http"/>を記述してる。 ・URIの拡張子が.rem (.soapでも.remでもどっちでもいいんですよね、確か。 ・クライアント側は、リモーティング構成とその他のアプリケーション構成のファイルを分けてる。(サンプルで分かれてたから。でも、1つのファイルでも問題なかったと記憶してます う〜ん・・・、大差ないですねぇ・・・ ところで、ConfigurationErrorsExceptionが発生するタイミングはどこでしょうか? クライアント側で RemotingConfiguration.Configure メソッドを実行した時ですか? サーバ側でconfigが読み込まれた時ですか? | ||||
|
投稿日時: 2007-01-04 15:26
回答ありがとうございます。
サーバ側に<channel>タグを追加してもだめでした。 >ConfigurationErrorsExceptionが発生するタイミングはどこでしょうか? サーバ側のメソッドを実行する際に発生します。 クライアントのConfigは読めているようです。 Dim entry As WellKnownClientTypeEntry = RemotingConfiguration.IsWellKnownClientType(GetType(IRemote1)) oAccessObject = Activator.GetObject(GetType(IRemote1)), entry.ObjectUrl) oAccessObject.GetXXXX #<-ここで発生 | ||||
|
投稿日時: 2007-01-04 18:38
なるほど、クライアントにインタフェースのみ公開するやり方ですね。
で、ちと試してみたんですが、特に問題なく動いちゃいました・・・。ただちょっと気になったのは、クライアント側の構成ファイルがNGの場合、クライアントアプリが起動して最初のconfig読み込みでエラーとならず、サーバ側のメソッドを実行する時点で初めてエラーとなるケースもボチボチありました。構成ファイルをぐちゃぐちゃいじってみて同じエラーを出そうとしたんですが出ませんでした・・・。 一応、試したことを書いておきます。 元ネタ⇒リモート処理の例 : インターネット インフォメーション サービス (IIS) でのホスト @まずそのまんま動くように配置 Aインタフェースのみ公開するやり方に修正して動作することを確認 BconfigSectionsとそこで定義したsectionを追加して正常に動作することを確認 C構成ファイルをいじって目的のエラーを出そうとしてみた Aで変更した箇所 ・クライアント側構成ファイルのwellknownのtypeのとこ、クラス名ではなくインタフェース名に変更 ・クライアント側コード
このサンプル、もう1度見直してみてはいかがでしょうか。 参考になればよいのですが。 | ||||
|
投稿日時: 2007-01-05 12:52
回答ありがとうございます。
サンプルではうまく動作することができました。 しかし、開発環境ではやはり同じメッセージが表示されてしまいます。 ユーザ設定の仕方が間違っているのではないかと考えて、ユーザ設定をすべて 削除し、以下のコードだけで試みましたがだめでした。 他に考えられる原因はありますでしょうか? また、かめたろ様は構成ファイルを分けているとのことですが、 物理ファイルとして分けているのでしょうか?それとも、プロジェクト内で分けていて 物理ファイルは1つなのでしょうか? <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.runtime.remoting> <application> <client> <wellknown type="xxx.IRemote1, xxx" url="http://localhost:80/testweb/MyApp2.rem" /> </client> </application> </system.runtime.remoting> </configuration> | ||||
|
投稿日時: 2007-01-05 14:33
もう、正常動作するサンプルとの相違点を探していくしかないのかないですかねぇ。設定ファイルもサンプルのと比較すると省略してる部分が見受けられるので、できるだけサンプルに近づけてみてはどうでしょうか。または、正常に動くサンプルに肉付けしていくとか。
#実際はあの部分を省略しても動くはずだけど、一応ね クライアント側の構成ファイルを分けていることについてですが、web.configとRemotingClient.configの2つに物理的に分けています。(クライアントがWebアプリ) あと、思い出したんですが、サーバ側の設定がうまくいっているかどうかをwsdlを参照することでチェックした記憶があります。 http://localhost:80/testweb/MyApp2.rem?wsdl こんなURLをブラウザでたたいてみて、正常に動いていればwsdlが表示されるはずです。 サーバ側がOKなようでしたら、クライアント側の問題と絞ってもいいような気がします。 |