top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
ここ数日 HTTPベースの通信プログラム開発での不具合で苦しみました → 解決しました。
今 ASP.NET + C# がサーバで Visual C++ + WinInet がクライアントな HTTPベースのクライアント/サーバ通信プログラムを製造しているのですが、これで思いっきりハマりました。ここ2日間以上もの間 メンバー3人で ず~っと原因究明すべく苦しみました。で、これが解決しました。いくつか問題があったのですが
WinInetに HTTP/1.0ベースでの通信を指示したのに、実際には HTTP/1.1ベースでの通信が行われていた
HTTP/1.1ベースでは キープアライブがデフォルトなのに プログラミングがそれを考慮していなかったので 『場合によっては』HTTP通信部分が異常な状態になる。
verbがPOST時に、HTTPのレスポンスのレザルトコードをチェックしてから送信していなかったので、TCPベースでの送受信シーケンスが 『場合によって異なる』 →これが原因で 現象の究明に より手間取りました。
しかも キープアライブが さらにTCPベースの通信シーケンスを 『場合によって異なる』状態にしてしまい、も~意味不明 って感じにしていた。
これを 下記のような変更を加えることにより 確認した範囲では完璧に安定動作するようになりました。
HTTPのレスポンスにステータスコードが入っている場合には まずステータスコードをチェックするようにした →TCPシーケンスを 『画一的』にすることができました
レスポンスヘッダーに Connection: close を追記
レスポンスヘッダーに Cache-Control: no-transform を追記 →効果のほどは最終的にはチェックしておらず。ちなみに 書くまでもありませんが その他キャッシュ抑制は全てもともと記載してありました。
この原因究明および解決のために下記の本が たいへんに役立ちました。そもそもはPerlの本なのですが、C++だろうがJavaだろうが (そしてC#だろうが) HTTPサーバ・クライアントプログラミングを行う私のような人間にとってこの本は 現状唯一無二の日本語参考本です。(実際の所 ほかにもあることはあるのですが、この本がずばぬけて素晴らしいのです)
また、TCPレベルでのシーケンスをキャプチャリングするために 下記ソフトが大活躍しました。このソフト無しでは原因究明は不可能でした。これがGPLで無償配布されているというのは 大変ありがたいことです。感激です。
有償ネットワークアナライザ(スニファー/snifferの類)は 費用の面から手が出ないので、無償ソフトでキャプチャリングできるのはとってもありがたいことです。今日一日 ず~っと 上記ペリカン本とFreePeekと にらめっこしてました。
どうも自宅PCのサウンドボードが不調です。ステレオの音楽CDを再生しても モノラルになってしまいます。(片方のスピーカーが機能しません)ということで、早速 サウンドボード更新を考えます。
などと思いつつ、『そういえば オンボードサウンド機能があったはずだなぁ』、と思い出し、オンボードサウンド機能で再生してみたら、なんとオンボードサウンド機能もモノラルになります。これは ハードウェア障害ではなくって OSカラミの問題だなぁ と気がつき…いろいろ調べてみたら、なんと、サウンドボードが不調なのではなく、Media Player 9 の設定が スピーカーをモノラル化(片方だけ再生)していたようなのです。これにはびっくりしました。Media Player 9 って いろいろ設定画面がありますが、これを 子どもの和音(4歳)が触って設定を変更していたのです。すっごくびっくりしました。
第九の歌詞対訳およびその解説が載っていて、とっても勉強になります。このページは私にとって大変利用価値が高いです。来年の7月頃に第九を演奏する予定なのですが、その際に活用させていただこうと思います。ありがとうございます。→ そういえば、最寄の第九演奏は 今年の12月です。つい最近も第九を弾いたばかりですが、あまり細かい勉強はせずに本番に乗ってしまいました。次回はこの手の資料を勉強してまじめに演奏してみようと 少しだけ決意を持つ今日この頃(苦笑)
依然として探索中…