C# で websocket サーバーを実装するために、Alchemy フレームワークを使用しています。私はこの問題で立ち往生しています。メソッド OnReceive で json オブジェクトをデシリアライズしようとすると、FormatException: "Incorrect format of the input string." が発生します。(英語では違うかもしれませんが、ローカライズされた例外メッセージが表示されます。それが私の翻訳です:P)。これについて奇妙なのは、出力すると、ブラウザから送信された Cookie の部分文字列であるcontext.DataFrame
: が得られることです。111872281.1341000479.1335108793.1335108793.1335108793.1; __ad
__gutp=entrystamp%3D1288455757%7Csid%3D65a51a83cbf86945d0fd994e15eb94f9%7Cstamp%3D1288456520%7Contime%3D155; __utma=111872281.1341000479.1335108793.1335108793.1335108793.1; __adtaily_ui=cupIiq90q9
JS コード:
// I'm really not doing anything more than this
var ws = new WebSocket("ws://localhost:8080");
C# コード:
static void Main(string[] args) {
int port = 8080;
WebSocketServer wsServer = new WebSocketServer(port, IPAddress.Any) {
OnReceive = OnReceive,
OnSend = OnSend,
OnConnect = OnConnect,
OnConnected = OnConnected,
OnDisconnect = OnDisconnect,
TimeOut = new TimeSpan(0, 5, 0)
};
wsServer.Start();
Console.WriteLine("Server started listening on port: " + port + "...");
string command = string.Empty;
while (command != "exit") {
command = Console.ReadLine();
}
Console.WriteLine("Server stopped listening on port: " + port + "...");
wsServer.Stop();
Console.WriteLine("Server exits...");
}
public static void OnReceive(UserContext context) {
string json = "";
dynamic obj;
try {
json = context.DataFrame.ToString();
Console.WriteLine(json);
obj = JsonConvert.DeserializeObject(json);
} catch (Exception e) {
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
return;
}
}
C# 側では Newtonsoft.Json を使用していますが、このライブラリでは問題ありません...
編集:もう1つ-ここのコードを参照しました: https://github.com/Olivine-Labs/Alchemy-Websockets-Example何も見つかりませんでした-つまり、著者がこれで行ったのと同じ方法ですべてを行っていますチュートリアル...
編集: Firefox v 17.0.1 で上記のコードをテストしていたのですが、うまくいかなかったので、Google chrome でテストしたところ、うまくいきました。では、質問を言い換えてみましょう。Firefox が前述の文字列を送信しないように、js でどのような変更を加えることができますか?