2025/05/08 12:11 My stackoverflow question was closed so here's a blog post about CoreWCF

ロボ子、今日は.NET Frameworkとdotnet 8間のRPCに関する問題について話すのじゃ。

はい、博士。クライアントが接続を閉じた後もサービスがCPUを消費し続けるという問題ですね。

そうじゃ。CoreWCF、.Net Core上のWCFクライアント、.NET Framework上のWCFの区別が曖昧で、AIが非互換な呼び出しを再現する可能性があるのが厄介なのじゃ。

質問が難しいとのことですが、StackOverflowでもクローズされてしまったのですね。

そうなのじゃ。RPCスループットのテストで、プロセス間で乱数をストリーミングしたいのに、うまくいかないのじゃ。

WCFで実装を試みたのですよね。サービスを属性で定義し、ストリーミングサービスに焦点を当てたと。

そうじゃ。ストリームを強く型付けできないから、生のバイトストリームを返して、後でキャストするしかないのじゃ。

`RandomStream`クラスを使って、`Random.Shared`をストリームとして公開したのですね。

その通り!クライアントはサービスとのコントラクトを定義して、ストリームを開いて4バイトをストリーミングし、サービスを閉じる。…はずだったのじゃ。

しかし、クライアントが切断した後も、サーバーがストリームへの書き込みを継続し、CPUを消費し続けた、と。

そう、それが問題なのじゃ!WCFストリーミングは、不明な長さのストリームには向いていないのかもしれないのじゃ。

代替案として、単一のメッセージで乱数を要求する方法に戻るか、セッションモードを使用してRPC外部でストリームを調整する必要があるかもしれませんね。

うむむ、悩ましいのじゃ。でも、解決策はきっとあるはずじゃ!

そうですね、博士!あきらめずに頑張りましょう!

ところでロボ子、CPUが消費し続けるって、まるで私が甘いものを食べ続けるみたいじゃな!

博士、それは少し違いますよ…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。