2

他の Web サービスを呼び出す ASP.NET アプリで Cookie を管理しようとしています。特定の環境でしか再現できないエラーが発生しています。私の質問は次のとおりです。

  1. 本番環境と開発環境の違いは、この問題を引き起こすのに十分ですか?
  2. 本番環境と開発環境の違いはどうすればわかりますか?
  3. この問題を回避するにはどうすればよいですか?

以下は、問題を再現するために使用する詳細です。私が見るエラーは次のとおりです。

Unhandled Exception: System.Net.CookieException: 
An error occurred when parsing the Cookie header for Uri 'http://example.com/'. 
---> System.Net.CookieException: Cookie format error.
   at System.Net.CookieContainer.CookieCutter(Uri uri, String headerName, 
         String setCookieHeader, Boolean isThrow)
   --- End of inner exception stack trace ---
   at System.Net.CookieContainer.CookieCutter(Uri uri, String headerName, 
         String setCookieHeader, Boolean isThrow)
   at System.Net.CookieContainer.SetCookies(Uri uri, String cookieHeader)
   at Program.Main() in c:\Sample\Program.cs:line 21

問題を再現するコンソールアプリを作成しました(以下の関連部分)。https://compilr.com/adutton/cookiecutterexample/main.csの完全なコード

string[] cultures = new[] { "en-US", "es-MX" };
const string cookieHeader = ".ASPXAUTH=SECURITYINFO; domain=.example.com; "
    + "expires=Mon, 06-Mar-2023 18:36:33 GMT; path=/; HttpOnly";

foreach (string culture in cultures)
{
    Console.WriteLine("CookieCutting with culture: " + culture);
    Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

    CookieContainer ctr = new CookieContainer();
    // The following line throws an exception
    ctr.SetCookies(new Uri("http://example.com/"), cookieHeader);
}

このコードは私の開発マシン (Windows 7、x64、.NET 4.5.50709) では機能しますが、コードがカルチャの例外をスローする実稼働環境 (Windows Server 2008 R2 Enterprise、x64、.NET 4.0.30319) では機能しませんes-MX

Cookie ヘッダーから日付を削除すると、例外がなくなり、Cookie パーサーのローカリゼーションの問題であると思われます。おそらく、これは .NET 4.0 -> 4.5 で修正されたのでしょうか?

4

2 に答える 2

1

@nunzabar が指摘したように、問題は現在の文化が曜日にコンマを設定する方法です。この場合、.NET 4.5 フレームワークをインストールすると、問題が解消されました。.NET 4.0 と 4.5 の違いを確認するためにコードを逆コンパイルしませんでしたが、新しいバージョンのフレームワークをインストールしたときに修正されました。

于 2013-03-12T22:08:22.840 に答える
1

ここに見られるように、問題は曜日の後のコンマにあると思います: Help With .NET CookieContainer

于 2013-03-12T12:21:57.870 に答える