- PR -

ノータッチデプロイメントでのエラー

投稿者投稿内容
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-02-02 20:30
Mickyでございます。
いつもお世話になっております。

いくつかの問題点があったものの、皆様のおかげでなんとか克服して
いよいよ形になってきたのですが、
いざ、ローカル環境からサーバーに移した所で、

−−−−−−−−−−−−−−−−−−−−−−−−
System.Security.SecurityException' のハンドルされていない例外が IEExec.exe で発生しました。

追加情報 : 種類 System.Net.WebPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 のアクセス許可の要求に失敗しました。
−−−−−−−−−−−−−−−−−−−−−−−−
と言ったエラーが出て悩まされております。

デバッガーが使えないので多少苦労しましたが、
エラーの箇所をなんとか限定したところ、
同サーバー上にあるWebサービスを呼び出す所で
エラーになっているようです。

最初は又DataSet絡みかと思い、単純に文字列を返す
Webサービスメソッドを作成して試したところ、
同じ現象になってしまいました。

上記エラーについて何か情報があればと思い書き込みさせて
いただきました。

作り始める前に、実験的にやったときは問題なかったと
思うんですが、どうしちゃたんでしょ

よろしくお願いいたします。
一休
常連さん
会議室デビュー日: 2003/11/26
投稿数: 20
投稿日時: 2004-02-02 21:21
http://www.microsoft.com/japan/msdn/vs/deployment/vbtchno-touchdeploymentinnetframework.asp#vbtchno-touchdeploymentinnetframeworkanchor7
ノータッチデプロイメントアプリケーションからWebサービスにアクセスするには、
exeとWebサービスが同一サーバ上に存在しなければなりません。

が、私もこれを遵守しているにもかかわらずMickyさんのおっしゃるエラーが発生したことがあります。

私の場合は、コントロールパネル→管理ツール→Microsoft .NET Framework 1.1 構成→ランタイム セキュリティ ポリシーで画面右側の「ゾーンセキュリティの変更」でインターネットゾーンのセキュリティレベルを「規定のレベル」に設定することで解決しました。
ただ、規定のレベルボタンを押す前も後も同じレベルだったのではっきりこれで解決するとは言い切れません。
セキュリティレベルが関係しているのは間違いないのですが。。。
中途半端で申し訳ありません。

また、Mickyさんがインターネットゾーンのセキュリティレベルをカスタマイズされている場合、リセットされてしまうと思いますのでご注意下さい。

原因が判ったら教えて頂けるとうれしいです。
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-02-03 09:25
Mickyでございます。
一休さん、おはようございます。
&情報のご提供ありがとうございました。

ちょっとパニクっていて、「どぉしよぉ〜〜(T_T)」
という感じだったのですが、
落ち着いて調べますと、似たような情報がありました。

http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=1916
これは、WebサービスからWebサービスを呼び出す時の
事みたいですね。
たしかに、こちらもそういう部分もあるのですが、
他のWebサービスを呼び出さない
単純なストリングを返すメソッドでもエラーになって
しまうと言う現象が出ているのもちょっと解せない所ではあります。

又、一休さんから教えていただいたセキュリティの設定の
方も確認しつつ調査を続けたいと思います。
取り急ぎ報告だけでも…と思いましたので…



[ メッセージ編集済み 編集者: Micky 編集日時 2004-02-03 09:35 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-03 09:46
 Webサービス呼び出しの部分を、どのようにコーディングされていますか?

string appbase = AppDomain.CurrentDomain.BaseDirectory;
string site = System.Secuerity.Policy.Site.CreateFromUrl(appbase).Name;

としてみてください。
※出典:MSDN Magaine 日本語版 No.29 P041
original: http://msdn.microsoft.com/msdnmag/issues/02/07/NetSmartClients/default.aspx
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-02-03 10:31
Mickyでございます。

Jittaさん、こんにちは

引用:

Jittaさんの書き込み (2004-02-03 09:46) より:
 Webサービス呼び出しの部分を、どのようにコーディングされていますか?



えっと、いたってシンプルに
Webサービスの参照を設定した後、

Service m_WebService1 = new Service();
DataSet dsWrk = m_WebService.Getxxxx( );

としています。

引用:

string appbase = AppDomain.CurrentDomain.BaseDirectory;
string site = System.Secuerity.Policy.Site.CreateFromUrl(appbase).Name;




これは、「上記内容を表示せよ」という事でよろしいでしょうか?
appbaseは「http://xxx.xxx.xxx.xxx/対象フォルダ/」
siteは「xxx.xxx.xxx.xxx」

となっており、一見問題があるようには思えないんですよ
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-03 10:55
Service m_WebService1 = new Service();
string appbase = AppDomain.CurrentDomain.BaseDirectory;
string site = System.Secuerity.Policy.Site.CreateFromUrl(appbase).Name;
m_WebService1.Url = m_webService1.Url.Replace("//localhost/"
, "//" + site + "/");
DataSet dsWrk = m_WebService.Getxxxx( );

かな?リプレースする"//localhost"は、DLLを「作成した環境でのサイト」になっていると思います。そこをリプレースしてやる、と。


 先に挙げたサイトの、「Communicating with Web Services」で、「Fig.9」を見てください。
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-02-03 18:04
Mickyでございます。
Jittaさん情報ありがとうございました。

ノータッチだと、クライアントで動作してるのはわかっているつもりでも、
なんかURLの指し示す場所を考える時には起動サーバーを基本にしていたりしちゃいます。
なんども、WebリファレンスのURLを確認して、
「サーバーに対してだってlocalhostになるわけだから大丈夫だよなぁ〜」
などと、間違って納得しちゃったり…
webService.Uriを、ダイレクトに指定した方がいいのかなぁ?とは
思うものの結局「localhost」を指定したり・・・

しかし、よくこんな情報見つけますよねぇ。まじ尊敬・・・
英語はイマイチですが、せっかく訳したので参考までに
書き込んじゃう事にしました。
重要なのは最後の1行位みたいですけどね。

で、更に調べていたら、AppDomain.CurrentDomain.BaseDirectoryを
Uriクラスのコンストラクタに指定して、
Uri.Hostプロパティを使うなんて手もあるみたいですね。

というわけで、この問題も解決いたしました。
ありがとうございました。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
「ノータッチデプロイメント」って、ユーザーとの対話だけが任務ってわけじゃないんだよね。
それと同じくらい頻繁に外部との対話が必要になるわけよ。
決められたゾーンの中での話しだし、対話って言っても、「ノータッチデプロイメント」が
起動されたサーバーとの応答と、Webサービス経由に限られちゃうんだよね。

起動サイトってのはなんやかんやと対話したいモノだよね。、
(そうでなくても他のサーバーへの転送要求も容易に構築できちゃう)
ラッキーな事に、Webサービスってのは殆どの「対話の用件」みたない事に対して
すごく柔軟なわけさ。

でもっとすごいのは、柔軟ってだけじゃなくてサーバー側とクライアント側の
コードを別々にできるから、めっちゃ扱いやすいモデルを提供できちゃうのよ
Webアプリだと結構、状態を維持することに気をつかうじゃん?
でも、Webサービスだと状態を気にせずに要求に対して処理が完結してるからいいんだよね。

これらのリクエストは普通、大きなものだったり、縮小した最小単位だったり
クライアントの状態を維持させたりするじゃん


そこで.Netを使ってWebサービス自体をインプリメントしたら、
Webサービスとの対話に必要なクライアント側のプロキシコードを
生成するっていうめんどくさい事も、WSDLを使ったURLをVS.NETで
示されるWeb Refarennseをプロジェクトに追加する事で超簡単にできちゃうんだよね。

でも、生成されたプロキシコードに起動されたサーバーを指すURLを直接埋め込んで
Callするのってややこしいよね。
そこで、AppDomainのAppBaseを使えば直接埋め込まれたURLを動的に見つけて
置き換えることが出来るってわけさ。

※あくまで雰囲気訳ですので・・・
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-03 19:37
引用:

Mickyさんの書き込み (2004-02-03 18:04) より:

しかし、よくこんな情報見つけますよねぇ。まじ尊敬・・・


 いいえ、教えていただいた情報です。。。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1833&forum=7
小野@EACさんからの情報です。

スキルアップ/キャリアアップ(JOB@IT)