- PR -

オブジェクト(ユーザー定義クラス)のやり取りの仕方(C#)

投稿者投稿内容
yuta
会議室デビュー日: 2005/11/16
投稿数: 13
お住まい・勤務地: 愛知県→静岡県(転勤)
投稿日時: 2006-01-16 08:42
 yutaです。
 沢山のレスポンス有難うございます。
 申し訳ありません、言葉足らずでしたので補足します。

 Windowsサービス ← リモートオブジェクト ← Webサーバー
          →            →

 WebサーバーとはWebアプリケーションのことです。
 Windowsサービスはコンソールアプリケーションとして作成されたものです。
リモートオブジェクトはWindowsサービスとWebサーバー両方のプロジェクトから
 参照しているライブラリです。
 3っつ共全て同一PC内で実行させています。
 WindowsサービスとWebサーバー間はTcpChannelを用いて通信を実現しています。

 ユーザー定義クラスはリモートオブジェクト(ライブラリ)内で次のように定義し
 ています。
で、現在はWindowsサービスからリモートオブジェクトへセットしたユーザー定義
 クラスのオブジェクトの取得をWebサーバー側で取得しようとすると、
 『指定されたキャストは有効ではありません。』
 というエラーが出てしまいます。

【リモートオブジェクト内】

 [SerializableAttribute]
 public class CUserSetting
 {
  private object m_ReceiveRobotState;
  public object ReceiveRobotState
  {
   get{
    return m_ReceiveRobotState; ←Webサーバー側で取得
   }
   set{
    m_ReceiveRobotState = (object)ReceiveRobotState; ←Windowsサービス側でセット
   }
  }

  ・・・
}

 あれから過去記事を今一度詳しく調べていたら↓のようなのを見つけたので、皆さん
 から頂いた意見と併せて調べてみます。
 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=13953&forum=7
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-16 11:05
引用:

yutaさんの書き込み (2006-01-16 08:42) より:
   get{
    return m_ReceiveRobotState; ←Webサーバー側で取得
   }



のときに m_ReceiveRobotState に入っている値の
データと完全な型はどうなっていますか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-01-16 22:16
ん〜、ごめんなさい。こだわります。
引用:

yutaさんの書き込み(2006-01-16 08:42)より:

 WebサーバーとはWebアプリケーションのことです。
 Windowsサービスはコンソールアプリケーションとして作成されたものです。
リモートオブジェクトはWindowsサービスとWebサーバー両方のプロジェクトから
 参照しているライブラリです。
 3っつ共全て同一PC内で実行させています。
 WindowsサービスとWebサーバー間はTcpChannelを用いて通信を実現しています。


 Windows サービスが、コンソールアプリケーションというのが、わかりません。さらに、コンソールアプリケーションと Web アプリケーションが TCP で通信する、というのも、わかりません。
 まず、「Windows サービス」というのは、アプリケーションのひとつの形態として存在するもので、コンソールアプリケーションと同列に並びます。ですから、これらが“同じ”というのが、わかりません。

 これがわからないので、「WindowsサービスとWebサーバー間はTcpChannelを用いて通信を実現」がわかりません。アプリケーションが他のアプリケーションを起動させ、起動させたアプリケーションと TCP 通信?例えば、ファイルでやりとりするとか、起動時引数でやりとりするとかじゃなく?どうせ同じ PC 内で動作するなら、関数として出すだけの方が、リモーティング処理でなやんだり、実行時にもリソース消費量が少ないから良いんじゃ?
___________________________________
□ written by Jitta on 2006/01/16
_________________
yuta
会議室デビュー日: 2005/11/16
投稿数: 13
お住まい・勤務地: 愛知県→静岡県(転勤)
投稿日時: 2006-01-17 20:40
 yutaです。
 度重なる素早いレスポンス有難うございます。
 読み返して気が付きました。
 Windowsサービスとコンソールアプリは別物です。
 スミマセン、皆さんを混乱に招きました。
 今度からは書き込む前にしっかり確認いたします。

 現在、WindowsサービスとWebサーバーとの定周期でのデータ−のやり取
 りをTcpChannelを用いて行っています。
 で、何故こんなやり方で実現させているかというと、自分自身今までプ
 ロセス間通信の経験がなく、ましてやWindowsサービスとWebサーバー間
 でのやり取りという事で情報が乏しくて、以前こちらで質問させて頂い
 た時のアドバイスを参考にこの方法を採用したのが起因します。
 とはいえ業務として行っている以上、ソフトウェアとしての効率や今回
 の質問のように問題解決に時間がかかるようでしたらJittaさんがおっし
 ゃる通り、確かに他のやり方に変える必要があります。
 (まだシステムがデバッグ段階という事もありサービスも今は手動で起動
 しています)

 で、現状ですがクラスのシリアル化で推し進める方向で色々と調べてい
 る最中でしたが、かるあさんのレスを元にソースを見直したら似たよう
 な長い名前のクラスオブジェクトが混在していたため、ただ単にそれが
 原因でキャストエラーを引き起こしていただけで現状のままでオブジェ
 クトのやり取りが上手く出来るようです。
 本当にお騒がせしました。
 今回の件が切っ掛けで今まで知らなかったクラスのオブジェクト化につ
 いての可能性に触れる事が出来たので他の部分で生かそうと思います。
 皆さん、色々と有難うございました。

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