さて、私はこの奇妙な問題を抱えています。TcpClient と Reactive Extensions を使用してチャットサーバーに接続する workerrole を作成しました。エミュレーターで実行すると、コードが機能します。最初は Rx に問題があると思っていましたが、現在は受信したパッケージ間でバイト オーダーが変わっているようです。
少し背景情報。受信した最初の 4 バイトはヘッダー、最初の 2 バイトはパケットタイプ、最後の 2 バイトは残りの長さです。問題をデバッグするには、次のステートメントを実行します。
var p1 = BitConverter.ToInt16(data, 0);
var p2 = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, 0));
var i1 = BitConverter.ToInt16(data, 2);
var i2 = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, 2));
Trace.TraceInformation("IsLittleEndian: {0}", BitConverter.IsLittleEndian);
Trace.TraceInformation("Header:({0},{1}),({2},{3})", p1, i1, p2, i2);
最初のパケットは次のようになります。
IsLittleEndian: True; TraceSource 'WaWorkerHost.exe' event
Header:(0,8704),(0,34); TraceSource 'WaWorkerHost.exe' event
ここでは、2 番目のペアが正しいペアです ((0,34)。0 = LoginSeed で、残りは 34 です)。
2 番目のパケットは次のようになります。
IsLittleEndian: True; TraceSource 'WaWorkerHost.exe' event
Header:(7,152),(1792,-26624); TraceSource 'WaWorkerHost.exe' event
ここで、最初のペアが突然正しいものになり、これが突然ビッグエンディアンであることを示す変更はありません。これは Azure のバグのようなものだと思わずにはいられません。それとも私が見落としたものなのでしょうか? エミュレーターでのこの作業に注意してください。インフラストラクチャの問題に関連していると思います。