C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: WindowsサービスでConsole.ReadLine


(過去ログ 55 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■30787 / inTopicNo.1)  WindowsサービスでConsole.ReadLine
  
□投稿者/ YOU (46回)-(2009/01/06(Tue) 20:54:41)

分類:[C#] 

言語:Visual Stdio 2008 .net C#

Windowsサービスを使って、通信ライブラリ(dll)を参照し、
受信処理メソッドをコールしています。
ただ受信処理メソッドの中でConsole.ReadLineを使用している
のですが機能していないように思えるのですが、Windowsサービスでは
機能しないのでしょうか?

詳しい方がいたら教えてください。
因みにWindowsコンソールでは、受信処理が正しく行えました。



引用返信 編集キー/
■30789 / inTopicNo.2)  Re[1]: WindowsサービスでConsole.ReadLine
□投稿者/ オショウ (68回)-(2009/01/06(Tue) 22:32:45)
> Windowsサービスを使って、通信ライブラリ(dll)を参照し、
> 受信処理メソッドをコールしています。
> ただ受信処理メソッドの中でConsole.ReadLineを使用している
> のですが機能していないように思えるのですが、Windowsサービスでは
> 機能しないのでしょうか?
>
> 詳しい方がいたら教えてください。
> 因みにWindowsコンソールでは、受信処理が正しく行えました。

  質問もいいですが、過去の他の質問に対するカキコがあり、未決のまま
  どんどん新しく質問しても、誰も答えてくれなくなりますヨ!

● 因みに、この質問に対する回答は・・・
  機能しません。

以上。
引用返信 編集キー/
■30791 / inTopicNo.3)  Re[2]: WindowsサービスでConsole.ReadLine
□投稿者/ オショウ (69回)-(2009/01/06(Tue) 22:49:11)
追伸

以前にも書きましたが、サービスって何ものか、まだ解っていないのでは?
システムサービスには、基本、デスクトップは無いのです。
よって、コンソールへの出力はできません。

次に、絶対できないのか?・・・
と言うことになりますと、サービスの設定でデスクトップとの対話を許可
するかどうかと言う設定があります。
そこでまず許可しないとできません。

で、許可しても簡単には対話できません・・・
そのサービスが動作するOSは何でしょうか?
WinXP までなら簡易的には対話できますが、VistaやServer OSの場合、セキュリティー
やら権限やら・・・果ては環境変数・レジストリ等を継承できるよう偽装しないと、
出力、もしくはデスクトップ側で表示するアプリとの通信はできません。

ただし、全く別のアプリでサービスとは非同期で尚且つ手動で起動させるようなアプリ
とサービスとの通信であれば、.NETリモートやただのソケット通信やPipe等で、サービ
ス側から出力された内容をデスクトップ側アプリで受信して表示させることはできます。

違いは、サービスと非同期でサービスがデスクトップ側アプリを起動しない、手動で起
動させる場合は、自前の通信プロトコルで可能ですが、サービスがデスクトップ側へ向
かってアプリを起動する場合は、いろいろ制約があるので、環境(OS)によっては、
できない場合もあります。

今回のようにただデバッグ出力を受信して表示するようなものですと、サービス側から
起動させなくても手動で起動すれば勝手に受信して表示するようなものでしたら大した
ことは無いと思います。

● YOUさんの現在の実力では、そこまで行くのは、結構大変ではないかと推測します。

  何はともあれ頑張って下さい。
  調べればちゃんと情報は入手できますヨ!

以上。
引用返信 編集キー/
■30794 / inTopicNo.4)  Re[3]: WindowsサービスでConsole.ReadLine
□投稿者/ YOU (48回)-(2009/01/06(Tue) 23:13:15)
No30791 (オショウ さん) に返信
>
ご指摘ありがとうございます。たしかに、サービスに関しては今までやったこと
がないので本当に投稿を参考に学ぶしかありません。
現在、WindowsServer2008のサービスを常駐させて、サーバ-装置間をソケット通信
の処理をWindowsサービスで行っています。
Windowsサービスでソケット通信する。サンプルソース等をご存知であれば
教えて頂きますでしょうか?

引用返信 編集キー/
■30807 / inTopicNo.5)  Re[4]: WindowsサービスでConsole.ReadLine
□投稿者/ オショウ (70回)-(2009/01/07(Wed) 07:33:38)
> Windowsサービスでソケット通信する。サンプルソース等をご存知であれば
> 教えて頂きますでしょうか?

  検索すれば、たくさんヒットしますヨ!

  因みに、非同期ソケット通信が基本と思ってますので・・・
  http://msdn.microsoft.com/ja-jp/library/bew39x2a(VS.80).aspx
  http://msdn.microsoft.com/ja-jp/library/fx6588te(VS.80).aspx

  この辺、如何?

※ 双方向なら、当然、サーバー・クライアントを1対として2対必要に
  なりますネ!

以上。
引用返信 編集キー/
■30815 / inTopicNo.6)  Re[5]: WindowsサービスでConsole.ReadLine
□投稿者/ YOU (49回)-(2009/01/07(Wed) 10:39:36)
No30807 (オショウ さん) に返信
>>Windowsサービスでソケット通信する。サンプルソース等をご存知であれば
>>教えて頂きますでしょうか?
>
>   検索すれば、たくさんヒットしますヨ!
>
>   因みに、非同期ソケット通信が基本と思ってますので・・・
>   http://msdn.microsoft.com/ja-jp/library/bew39x2a(VS.80).aspx
>   http://msdn.microsoft.com/ja-jp/library/fx6588te(VS.80).aspx
>
>   この辺、如何?
>
> ※ 双方向なら、当然、サーバー・クライアントを1対として2対必要に
>   なりますネ!
>
> 以上。

オショウ さんありがとうございます。
参考にさせて頂きます。

受信待ちで何か方法があれば何方か教えて頂けないでしょうか?

現在、Windowsサービスの中で共通通信.dllを参照し、
受信クラス(共通通信.dll)の受信処理メソッドをコールしています。
コール先の受信メソッドではマルチスレッド(非同期でコール)を使用しています。
コンソールアプリケーションで確認したときは、受信されるまで待機状態にする
ために受信メソッドの中でConsole.ReadLine()を使用していたのですが、
Windowsサービスに移植したときにConsole.ReadLine()は機能しないので
待機する手段を考えてdoEvent等いれてやってみたのですがサービスが起動する前で
エラーとなります。受信待ち状態にする方法を教えてください。

エラー1053 そのサービスは指定時間内に開始要求または制御要求に応答しませんでした」のエラーとなりました。















引用返信 編集キー/
■30824 / inTopicNo.7)  Re[6]: WindowsサービスでConsole.ReadLine
□投稿者/ aetos (66回)-(2009/01/07(Wed) 12:11:43)
No30815 (YOU さん) に返信

.NET Framework でサービス作ったことがないので外しているかもしれませんが…
サービスで同期受信待ちをしてはいけません。

もとの通信プログラムがコンソールアプリなら、たぶんシングルスレッドで動いてますよね。
サービスにする前に、GUI のチャットアプリでも作ってみてはいかがでしょうか。
今と同じ感覚で受信待ちすると、ハングアップすると思います。
まずはそこで固まらないような通信の仕方を習得するのが先だと思います。

# なんか、共通通信ライブラリってやつが柔軟性のない作りになっていそうな予感がしますけど。
引用返信 編集キー/
■30825 / inTopicNo.8)  Re[7]: WindowsサービスでConsole.ReadLine
□投稿者/ YOU (50回)-(2009/01/07(Wed) 13:17:16)
No30824 (aetos さん) に返信
> ■No30815 (YOU さん) に返信
>
> .NET Framework でサービス作ったことがないので外しているかもしれませんが…
> サービスで同期受信待ちをしてはいけません。
>
> もとの通信プログラムがコンソールアプリなら、たぶんシングルスレッドで動いてますよね。
> サービスにする前に、GUI のチャットアプリでも作ってみてはいかがでしょうか。
> 今と同じ感覚で受信待ちすると、ハングアップすると思います。
> まずはそこで固まらないような通信の仕方を習得するのが先だと思います。
>
> # なんか、共通通信ライブラリってやつが柔軟性のない作りになっていそうな予感がしますけど。
ありがとうございます。
サービスで受信待ちをしてはいけない」という回答を頂いたのですが
相手装置が10分周期で動いているため、受信を待つ処理でないといけません。
受信待ちにしようとした場合、他に方法はあるのでしょうか?
知っていたら教えてください。
現在、GUIで調査中です。





引用返信 編集キー/
■30828 / inTopicNo.9)  Re[8]: WindowsサービスでConsole.ReadLine
□投稿者/ オショウ (71回)-(2009/01/07(Wed) 14:33:54)
> 受信待ちにしようとした場合、他に方法はあるのでしょうか?
> 知っていたら教えてください。
> 現在、GUIで調査中です。

  非同期の意味と使い方、解っておられないようで!
  非同期のソケット通信をよく調べてみて下さい。

  同期でないと言うことがどういう意味なのか!

以上。
引用返信 編集キー/
■30833 / inTopicNo.10)  Re[9]: WindowsサービスでConsole.ReadLine
□投稿者/ YOU (51回)-(2009/01/07(Wed) 16:12:35)
No30828 (オショウ さん) に返信
>>受信待ちにしようとした場合、他に方法はあるのでしょうか?
>>知っていたら教えてください。
>>現在、GUIで調査中です。
>
>   非同期の意味と使い方、解っておられないようで!
>   非同期のソケット通信をよく調べてみて下さい。
>
>   同期でないと言うことがどういう意味なのか!
>
> 以上。
ありがとうございます。
前回のご指摘の通り、今行うとしていたのは同期処理でした。
受信待ちにしているということは、同期処理になってますね。
すみません。
Windowsサービスを使用しない方向で、再調査し、検討いたします。
ありがとうございました。


引用返信 編集キー/
■30914 / inTopicNo.11)  Re[10]: WindowsサービスでConsole.ReadLine
□投稿者/ Jitta on the way (256回)-(2009/01/08(Thu) 21:13:30)
No30833 (YOU さん) に返信
> 前回のご指摘の通り、今行うとしていたのは同期処理でした。
> 受信待ちにしているということは、同期処理になってますね。
> すみません。
> Windowsサービスを使用しない方向で、再調査し、検討いたします。

あれ?受信があるまで待つ、って出来ますよね?マルチ スレッドなんですよね?サービスとしてのメッセージ処理と、ネットワーク アクセスの処理でスレッドが別れているなら、受信するまでブロックしても構わないですよね?
あるいは、非同期受信にして、受信するべきデータがくればイベントを上げるとか、定期的にデータが来てないかチェックするとか、方法はいくつかあると思います。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -