2011-01-19 9 views
1

ローカルサーバー(casiniとIIS 7.5の両方)でMVC 2を使用して構築したWebアプリケーションをテストしました。 しかし、アプリケーションをWindows 2008サーバーの標準版(IIS 7.5も実行しています)に展開すると、予期しない結果が発生しています。ローカルとデプロイされたMVC 2アプリケーションの違い

問題は、グラフにxmlデータをファイルに書き込んでグラフを表示するようにコントローラが指定されていることです。

アプリケーションがデプロイされると、すべてが機能します(プロファイルの切り替え/月のスケールの表示)。ただし、日付範囲を指定しようとすると、最初のxmlエントリ値を0にしている間何も起こらなかったかのようにアプリケーションが読み込まれます。

これはローカルサーバーでは発生しませんが、展開されたサーバーまたはローカルサーバーでエラーは発生しません。

ここに、この問題を解決できる可能性のあるコードの関連部分を示します。

アクションメソッド:

public ActionResult Index(string clientProfile, string domainProfile, string period, string sDate, string eDate) 
{ 
    if (period == "Month") 
      { 

       if (!string.IsNullOrEmpty(sDate) && !string.IsNullOrEmpty(eDate)) 
       { 
        var strXML = seoService.GraphForTrafficCountForDomain(clientProfile, sDate, eDate); 

        System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "/FusionCharts/Data/Traffic.xml", strXML); 
       } 
       else 
       { 
        var strXML = seoService.GraphForTrafficCountForDomain(clientProfile); 

        System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "/FusionCharts/Data/Traffic.xml", strXML); 
       } 
      } 
      else if (period == "Year") 
      { 

       var strXML = seoService.GraphForVisitsCountForDomainGroupByYear(clientProfile); 

       System.IO.File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "/FusionCharts/Data/Traffic.xml", strXML); 
      } 

      return View(); 
} 

サービス機能:

public string GraphForTrafficCountForDomain(string domain, string sDate, string eDate) 
{ 
      var profile = profileService.GetProfileByDomain(domain, null); 

      string strXML = ""; 

      var StartingDate = DateTime.Parse(sDate); 
      var EndingDate = DateTime.Parse(eDate); 

      var data = 
      repository.FindAll<TrafficData>(x => x.ProfileId == profile.Id && x.Date >= StartingDate && x.Date <= EndingDate).OrderByDescending(d => d.Date).ToList(); 

      strXML += @"<?xml version=""1.0"" encoding=""utf-8"" ?>"; 
      strXML += @"<graph caption="""" subcaption="""" xAxisName=""Month"" yAxisName=""Traffic"" decimalPrecision=""0"" formatNumberScale=""0"">"; 

      for (DateTime date = StartingDate; date.Date <= EndingDate; date = date.AddMonths(1)) 
      { 
       var startDate = new DateTime(date.Year, date.Month, 1); 
       var endDate = new DateTime(date.AddMonths(1).Year, date.AddMonths(1).Month, 1).AddDays(-1); 

       int value = 0; 
       if (data.Any(x => x.Date >= startDate && x.Date <= endDate)) 
       { 
        value = data.Where(x => x.Date >= startDate && x.Date <= endDate).Select(d => d.TrafficCount).Sum(); 
       } 

       strXML += String.Format(@"<set name=""{0}"" value=""{1}"" hoverText=""{2}""/>", 
              date.ToString("MM-yy"), (value == 0) ? "0" : value.ToString(), 
              (value == 0) ? "0" : value.ToString() + " " + date.ToString("MM-yy")); 
      } 

      strXML += @"</graph>"; 

      return strXML; 
} 

私も正しい出力と間違った出力を含む画像を添付しています。

Output Image

+0

XMLファイルが本番環境で正しく書き込まれていませんか?そうでない場合は、正しい出力の代わりに何が書かれていますか? XSDでXMLWriterを使用することを検討することをお勧めします。これにより、XMLをよりきれいに書くことができ、エラーを起こしにくくなります。 –

+0

月のフィールドは同じままで、最初の値のみが0として書き込まれます。 XMLWriterを使用する方がより洗練されていますが、XML構築スクリプトはデフォルトの関数(日付範囲なし)とまったく同じで、同じファイルに書き込まれています。 –

答えて

0

問題は(サーバは、私が存在すると同じ国でホストされていても)何らかの理由でサーバーの文化との違いでした。

DateTimeオブジェクトが正しく解析されませんでした。

関連する問題