IPCの問題があります。IPCウィンドウのサービスウィンドウフォーム
serverPipe = new NamedPipeServerStream(Constants.PIPE_NAME, PipeDirection.InOut, 1, PipeTransmissionMode.Message, PipeOptions.Asynchronous);
Thread thread = new Thread(new ThreadStart(pipeWork));
thread.Start();
配管が
private static void pipeWork()
{
try
{
byte[] buffer = new byte[1024];
while (true)
{
if (!serverPipe.IsConnected)
serverPipe.WaitForConnection();
int nr = serverPipe.Read(buffer, 0, buffer.Length);
String str=Encoding.Default.GetString(buffer);
…
}
}
catch (Exception ex)
{
}
}
と私はクライアントに配管が
private void pipeWork()
{
try
{
while (true)
{
using (StreamReader sr = new StreamReader(clientPipe))
{
string message;
while ((message = sr.ReadLine()) != null)
{
…
}
}
}
}
catch (Exception ex)
{
}
}
ある
clientPipe = new NamedPipeClientStream(".", PhotoServiceClassLibrary.Constants.PIPE_NAME, PipeDirection.InOut,PipeOptions.Asynchronous);
clientPipe.Connect();
clientPipe.ReadMode = PipeTransmissionMode.Message;
pipeThread=new Thread(new ThreadStart(pipeWork));
pipeThread.Start();
を持つWindowsフォームにある
:私は、WindowsサービスNamedPipeServerに作成されました
I wan私が実装する別のWindowsフォームをテストするために作成したので
StreamWriter write = null;
write = new StreamWriter(serverPipe);
if (serverPipe.IsConnected)
{
write.Write(message);
write.Flush();
}
コードが正しい:Tサービスは、サービスはのStreamWriterのSWにメッセージを書き込むために、WindowsフォームからいるContextMenuStripを無効にするには、アクションを開始するときWindowsサービスと同じようなものは、 windowsフォームパイプサーバー - > windowsフォームパイプクライアント間の通信はうまくいきます。 問題は、Windowsフォーム - クライアントパイプがWindowsサービス - サーバーパイプからメッセージを受信しないことです。
私はWCFが良いアイデアになることは知っていますが、なぜ低レベルのIPCで動作していないのか理解したいと思います。どうして?私は非常に奇妙な行動を見た。私のサービスはWindowsフォームと2回対話します。 1.私のサービスはいくつかの写真をダウンロードするように設計されています。彼はダウンロードを開始すると、彼はそれを発表するためにWindowsのフォームにメッセージを送信します。 2.私はサービスを停止すると、彼はWindowsフォームにメッセージを送信し、彼はまた停止します。 私は、両方のメッセージがサービスが停止した後にのみWindowsエージェントに到着することを発見しました。なぜ誰かが説明できますか?
いや、私の実際のコードではありません。私の実際のコードは です。{ [...] } catch(例外ex) { throw ex; } – user61652
と、いいえ、私は何のエラーもありません...私はWindowsサービスとは何をしなければならないshoulは、namedpipeを介してWindowsフォームと通信??? – user61652
例外をもう一度スローする場合は、「throw;」を実行します。 「投げてはいけない」。あなたがただそれを転覆させようとしているならば、それを捕まえないでください。ベスト、それをキャッチし、それを記録する。 –