QA@IT

クライアントサーバーアプリとWebアプリの混在するシステムを作っています。(C#、asp.net、フォームアプリ)

5519 PV

こんばんは。
夜分遅くにすみません。
問題を解決できなくて、帰れなくて・・・。
初心者ですので、とんちんかんな質問、あるいは、わかりにくい質問になっていたら、すいません。
一つのソリューションに、クライアントサーバーアプリとWebアプリが混在しています。
クライアントサーバーアプリから、アップロードボタンのようなボタンを押したら、WebアプリのForm.aspxやdll等をFTP等を使って、クライアントサーバーアプリで指定したWebサーバー(IIS)に、アップロードできるようにしたいのです。しかし、クライアントサーバーアプリでWebアプリを参照し、クライアントサーバーアプリのbinフォルダを見ても、Form.aspxなどのファイルは作成されず、どうやってアップロードすればよいのか、わかりません。(そもそも出来るのかどうかもわかりません。)

*クライアントサーバーアプリでWebアンケートの定義ファイル(または定義をDBに格納)を作成し、その定義に従ってアンケート画面を表示するWebフォーム及びdllを、ホスティングサービスなどのインターネット上のIISにアップロードしたいのです。(アンケート毎に配置する場所が異なり、また、使用するユーザーがあまりコンピュータの知識が無い前提(そういう私も知識レベルは情けないほど低いのですが)なので、手動でWebサーバーに配置するのではなく、クライアントサーバーアプリから配置できるようにしたいのです。

どなかかご存じの方がいましたら、お手数をおかけしますが、お教え願います。

どうぞ、よろしくお願いいたします。

  • 何をしたいのかよくわかりません。ASP.NET Web Forms アプリを実装した Web サーバー (IIS) に、IE などのブラウザからではなく、Windows Forms アプリからファイルをアップロード指定ということですか? -
  • 例えば、以下のページのサンプルコードのような感じですか?
    http://msdn.microsoft.com/ja-jp/library/36s52zhs(v=vs.110).aspx
    -
  • 一番上のコメント誤記がありました、すみません。
    誤:アップロード指定 ⇒ 正:アップロードしたい
    -
  • こんにちは。返信ありがとうございます。
    説明が下手ですいません。
    Windows Formアプリから、Webアプリにファイルを送信するのではなく、WebForm.aspxをアップロードしたいのです。
    ビルド時にWindows Formプロジェクトのbinにフォルダを作成して、その中にWebForm.aspxファイルを配置するようなことは出来ないのでしょうか?
    よろしくお願いします。
    -
  • 依然として意味不明です。開発環境で作った ASP.NET Web Forms アプリのファイルを、リモートにある Web サーバーにインターネット越しにアップロードするということですか? 普通そういうことには FTP サーバー/クライアントを使いますけど・・・ -
  • こんばんは。ありがとうございます。
    はい、FFFTPなどのツールを使って貰えれば済む話なのですが、それをツールを使わずに行いたくて。
    状況を上手く伝えられなくてすみません。
    -
  • では、FTP クライアントを含めて自分で作るしかないと思いますが。それと、Web サーバーに FTP サーバーの機能を持たせることも必要になると思います。質問者さんにそのスキルがないとなんともならないと思いますよ。 -
  • こんばんは。
    アップロードの方は、WebClientクラスのUploadFileメソッドを使えばいいのかなと思っています。
    ありがとうございました。
    -
  • FileUpload を使うのは違うのでは? アップロードはできるでしょうが、ワーカープロセスに書き込み権利を与えなければならず、セキュリティ的に問題があるかも。先にも書きましたが、FTP クライアントを自力で作るようなことになると思います。 -
  • こんにちは。
    UploadFileを使おうと考えているのですが、FileUploadというのもあるのでしょうか。
    ネットでc#のFTP関連を調べるとUploadFile関係の記事が沢山出てきます。これでよいのかと。
    よろしくお願いします。
    -

回答

解決済みになってますが、一応。

要望的にはWebアプリケーションをIISに配置するようなクラサバアプリを作りたいとかそういう事なんだと思います。
VSのWeb発行のようなものを簡単なUIでやるようなやつですよね、現場では資源配置ツールとか呼ばれたりする。

全体としては細かい話はあるとは思いますが、質問自体としては以下の部分

クライアントサーバーアプリのbinフォルダを見ても、Form.aspxなどのファイルは作成されず、どうやってアップロードすればよいのか、わかりません。

に今詰まってるのだと思います(違ってたらごめんなさい)。


概要

Webプロジェクト(目的のASPXがあるプロジェクト)とクラサバオブジェクト(WinFormsプロジェクト?)の位置関係が良く分かりません(参照というのは参照設定のことですかね?)が、同じマシンで開発しているのであれば
Webプロジェクトの方で「Webの発行」を発行方法「ファイルシステム」で任意の場所(bin以外の普通のディレクトリの方がいいかとは思います)行い、
クラサバアプリの方はexeファイルをそこに持っていく(手動またはビルド後スクリプトをプロジェクトのプロパティのビルドタブから設定してビルド後にexeをコピーさせる)ようにするという手があると思います。

Web発行のやり方

Webの発行はたとえばVS2013のWebアプリケーションなら
VS上でWebアプリのプロジェクト右クリック

  • 発行を選ぶとダイアログが出てくる。 *プロファイル-初めてだと思うので<新しいプロファイル>を選び名前を適当に
    • 発行方法- ファイルシステムを選ぶ、ターゲットの場所は試しなら適当なディレクトリ作ってそこを指定すればよいかと
    • 構成-特に理由がなければReleaseのままでいい
      • ファイル発行オプションは自分で調べて好きなのつけてください(発行前削除はつけといてもいいかも?)
    • 発行ボタンクリック

でできると思います。

対象のディレクトリファイルがいっぱい出てると思います。それが必要なファイルですね。
同じところにexeを置いて実行できるようにすれば(それを自動化したいならビルド後イベントという機能でやってみてはどうでしょうか)、目的は果たせそうな気がします。


余談ですが、通常プロジェクト内のファイルをビルドによってbinフォルダ(というかビルドファイルの格納先)にコピーしたいなら、VSのプロジェクトエクスプローラでそのファイルのプロパティウィンドウから「出力先ディレクトリにコピー」を「常にする」などにすればいいです。
ただしプロジェクト内にいないといけない(※)のと、必要なファイルがどれなのかまだ把握されていないようにお見受けしますので、発行を利用した方が良い様に思います。

(※)実際は別プロジェクトのファイルでも追加するときに「リンクの追加」という形で追加すればできそうな気もしますが、一度にいろいろ出てきても混乱するとおもいますし、なによりファイル数が多そうな気がするので現実的じゃない様にも思えます。


別途 参考資料として手動でやった場合どんな感じかというのは XCOPY配置に関する説明が役に立つかもしれません(資料として古いのでお役に立てなければすみません)
http://support.microsoft.com/kb/326355/ja

わかりにくい文章ですいませんが参考までに。

編集 履歴 (0)
  • こんばんは。
    ありがとうございます。
    まさに私が躓いていたところで、おかげで解決しました。
    わからないことを、わかるように説明するのは、スキルの無い私にはなかなか難しいです。
    本当にありがとうございました。
    -
  • あまり偉そうなこと言えませんが多少説明の中に質問が埋れてしまっている感はありましたので、もう少し本当に聞きたいことを目立たせるようにするといいかもしれませんね。
    一方で聞き手が質問者に歩み寄れるかどうかもありますしこの辺は相性とかもあるでしょうから難しいところですね。
    -

ざっくりですが、下記のような設計で実現できるかと思います。
キモは定義データの設計をどうするかですね。


アンケート定義

  • XML等のテキストベースで表現できる形式にしたほうが取扱しやすくなります

CSアプリ(デザイナ)

定義エディタ機能
  • 上記の定義データを作成し、クライアント側に保存します
アップロード機能
  • webサーバのURLを指定して、作成した定義をアップロードします
  • アップロードはWebClientクラスなどを使用してPOSTメソッドで送信します

Webアプリケーション

定義受信ページ
  • POSTメソッドで定義データを受信します
  • 受信したデータはサーバサイドスクリプトでDBやローカルファイルに保存します
アンケート表示ページ
  • 保存した定義データを元にHTMLのフォームを生成します
編集 履歴 (0)
  • こんばんは。
    ありがとうございます。
    定義にはXMLシリアル化(この言い方で正しいのかわかりませんが)で行おうとしています。大変参考になりました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。