- PR -

IIS以外のWebサーバーからwindowsコントロール(IE埋め込み)を配信することは可能でしょうか?

投稿者投稿内容
ひろひろ
常連さん
会議室デビュー日: 2004/07/23
投稿数: 36
投稿日時: 2006-04-21 12:39
いつもお世話になっております。

当方、Javaに関してはそこそこの知識はあるのですが、.NETに関してはまだまだわからないところがあります。
ですので、要領を得ていない質問かもしれませんがご容赦ください。

現在、私は
「Apache+Tomcatで動作するサーバーのJSPページにWindowsコントロールを埋め込み、
クライアントファイルをサーバーにアップロードする方法」を調査しています。
(ドラッグアンドドロップなどで。)
(ノータッチデプロイメントではなく、IEへのWindowsコントロールの埋め込みです。
ActiveXコントロールのような埋め込み式が客先からの要望となっています。)

http://japan.internet.com/developer/20051220/25.html
↑このあたりを参考にしながらIISから簡単なコントロールを配備するものはできたのですが、
このサンプルのプログラムを配信するHTTPサーバーをApacheに変えるとコントロール
を実行できるマシンとできないマシンに分かれてしまいます。
(実行できるマシンは、どうもIISでの成功をキャッシュしているような気がします。)

仕組み的にどうしてもサーバーはIISでないといけないのでしょうか?

ActiveXコントロールのCABファイル配信のようにApacheからWindowsコントロールを
配信することはできないのでしょうか?


ちなみに作成したサンプルは.NET 2003のC#で
コード:

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.IO;

namespace HelloWorldCtl
{
/// <summary>
/// UserControl1 の概要の説明です。
/// </summary>
public class HelloWorldCtl : System.Windows.Forms.UserControl
{
private System.Windows.Forms.ListBox listBox1;
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
private System.ComponentModel.Container components = null;

public HelloWorldCtl()
{
// この呼び出しは、Windows.Forms フォーム デザイナで必要です。
InitializeComponent();

// TODO: InitComponent 呼び出しの後に初期化処理を追加してください。
this.listBox1.Items.Add("fileUpload");


}

/// <summary>
/// 使用されているリソースに後処理を実行します。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if( components != null )
components.Dispose();
}
base.Dispose( disposing );
}

#region コンポーネント デザイナで生成されたコード
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード]エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.listBox1 = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// listBox1
//
this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.listBox1.ItemHeight = 12;
this.listBox1.Location = new System.Drawing.Point(0, 0);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(150, 148);
this.listBox1.TabIndex = 2;
//
// HelloWorldCtl
//
this.AllowDrop = true;
this.Controls.Add(this.listBox1);
this.Name = "HelloWorldCtl";
this.ResumeLayout(false);

}
#endregion

protected void listBox1_DragEnter(object s,DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}

protected void listBox1_DragDrop(object s,DragEventArgs e)
{
try
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
foreach (string fileName
in (string[])e.Data.GetData(DataFormats.FileDrop))
{
MessageBox.Show(fileName);
this.listBox1.Items.Add(fileName);

FileInfo info = new FileInfo(fileName);
string toFileName = "c:\\\\temp\\\\"+info.Name;
MessageBox.Show("2:"+toFileName);
File.Copy(fileName , toFileName );

MessageBox.Show("3:"+fileName);
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}

}




HTMLページは
コード:

<html>
<body>
<p>Hello World Control<br> <br></body>
<object id="HelloWorldControl1"
classid="http:HelloWorldControl.dll#HelloWorldCtl.HelloWorldCtl"
height="500" width="500" VIEWASTEXT>
</object>
<br><br>
</html>



です。

よろしくお願いします。


[ メッセージ編集済み 編集者: ひろひろ 編集日時 2006-04-21 13:08 ]
ひろひろ
常連さん
会議室デビュー日: 2004/07/23
投稿数: 36
投稿日時: 2006-04-21 13:08
補足です。

http://japan.internet.com/developer/20051220/25.html
このサイトにある「仮想ディレクトリの作成」というのはやらずにIISからコントロールを配信することができましたので、Apacheでもできるんじゃないか?と思っています。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-04-21 18:13
引用:

このサンプルのプログラムを配信するHTTPサーバーをApacheに変えるとコントロール
を実行できるマシンとできないマシンに分かれてしまいます。



各クライアントの .NET Framework ランタイムの導入状況による差だったりはしませんか?

マネージコントロールをサーバに配置しても、.NET Framework ランタイムの配布までしてくれたりはしませんよ。

引用:

仕組み的にどうしてもサーバーはIISでないといけないのでしょうか?



いいえ。そんなことは無いです。

引用:

ActiveXコントロールのCABファイル配信のようにApacheからWindowsコントロールを
配信することはできないのでしょうか?



可能なはずです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-21 19:34
サーバが DLL へのGET リクエストを許可しているか、とか?
# 設定できるんだっけ?
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-04-21 20:07
引用:

Jittaさんの書き込み (2006-04-21 19:34) より:
サーバが DLL へのGET リクエストを許可しているか、とか?
# 設定できるんだっけ?


あると思いますよ。CGIのソースコードや実行バイナリダウンロードされちゃ、普通は困りますからね。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2006-04-21 20:11
こんばんは

apacheのaccess_logやerror_logにはどのようなログが書き込まれますか?
mime-typeの設定ではないでしょうか?

IEの設定で署名の無い云々というのがあった記憶がありますけど、これは関係なさそうですかね?
IISとApacheのゾーン設定などは同じなのでしょうか?
ひろひろ
常連さん
会議室デビュー日: 2004/07/23
投稿数: 36
投稿日時: 2006-04-22 15:41
みなさん、レスありがとうございます。

私のほうでも、その後調査しましてコントロールがロードできなかった原因がわかってきました。
主な原因は
・.NETフレームワークランタイムがインストールされていない
・コード アクセス セキュリティ ポリシーの設定が各クライアントバラバラ
という原因でした。

ランタイムをインストールすることはもちろん、ゾーンセキュリティの設定で
完全に信頼するようにしたら、ロードされました。
(ローカル資源にもアクセスできました。)

ApacheもIISも関係ないようです。


引用:

apacheのaccess_logやerror_logにはどのようなログが書き込まれますか?
mime-typeの設定ではないでしょうか?


Apacheのログを見てみましたが、特に変なログは出ていませんでした。
やはりクライアント側の問題のようです。


渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-04-24 06:22
引用:

引用:

apacheのaccess_logやerror_logにはどのようなログが書き込まれますか?
mime-typeの設定ではないでしょうか?


Apacheのログを見てみましたが、特に変なログは出ていませんでした。
やはりクライアント側の問題のようです。



IIS 以外のWebサーバを使用する場合、Webサーバに MIME-Type の追加が必要なはずです。
過去ログに乗ってたような気がしますが。。。

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