Asp.Net3.5でアプリケーションを開発しました。ここでは、4層アーキテクチャを使用しました。
サーバーの詳細
IIS7を搭載したWindowsServer200864ビットOSでホストされているアプリケーション。サーバーには32GBのRAMと200GBのハードドライブが搭載されています。
同じサーバーでホストされているアプリケーションとデータベースの両方を公開します。
問題
従業員のレビューを送信しようとしているレビューフォームが1つあります。
シングルユーザーがWebサーバー上のアプリケーションにログインしている場合、アプリケーションは正常に機能しています。ユーザーはレビューを送信できます。しかし、それが複数に増えるとすぐに問題が発生します。たとえば、複数のユーザーが一度に[送信]ボタンをクリックしてレビューを送信すると、1人の従業員レコードのみがデータベースに保存され、残りのすべてのユーザーのデータは保存されませんが、すべてのユーザーに「正常に送信されました」というメッセージが表示されます。
また、イベントログでエラーを確認したところ、以下のようなメッセージが表示されます。
イベントコード:3005イベントメッセージ:未処理の例外が発生しました。イベント時間:2013年3月6日11:53:37 AMイベント時間(UTC):2013年3月6日6:23:37 AMイベントID:e417857a86074b16bbf05bce818a5b0dイベントシーケンス:11イベント発生:1イベント詳細コード:0
アプリケーション情報:アプリケーションドメイン:/ LM / W3SVC / 1 / ROOT / spmstest-2-130070176529122850信頼レベル:完全なアプリケーション仮想パス:/ spmstestアプリケーションパス:C:\ hrpmsapp \ PMSPublished Test \マシン名:INDW00029
プロセス情報:プロセスID:9320プロセス名:w3wp.exeアカウント名:IIS APPPOOL \ DefaultAppPool
例外情報:例外タイプ:NullReferenceException例外メッセージ:オブジェクト参照がオブジェクトのインスタンスに設定されていません。
要求情報:要求URL:要求パス:ユーザーホストアドレス:ユーザー:認証済み:False認証タイプ:スレッドアカウント名:IIS APPPOOL \ DefaultAppPool
スレッド情報:スレッドID:10スレッドアカウント名:IIS APPPOOL \ DefaultAppPool偽装:Falseスタックトレース:ASP.global_asax.Session_End(オブジェクト送信者、EventArgs e)
カスタムイベントの詳細:
以下のサンプルコードを見つけてください。
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using PMS.BO;
using PMS.BAL;
using System.Data.OleDb;
public partial class Reviews_DevelopmentReview : System.Web.UI.Page
{
ClsUtility cUtil = new ClsUtility();
ClsDevRevBAL DevRevBAL = new ClsDevRevBAL();
ClsDevRevBO DevRevBO = new ClsDevRevBO();
ClsObjectiveBAL ObjBAL = new ClsObjectiveBAL();
ClsMailSetBO MailSetBO = new ClsMailSetBO();
ClsMailSetBAL MailSetBAL = new ClsMailSetBAL();
static DataSet dsDevRevGridHead;
static DataTable dtDataForMail;
static int DevRevCode = 0;
int EmpRating = 0; int MgrRating = 0;
int result;
static int StatusCode;
static bool isFiveRatingApplicable = false;
static string companyId = string.Empty;
static string JobRoleId = string.Empty;
static string EmpCode = string.Empty;
static int loginEmpCode;
static string LoginType = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["UserID"] == null)
{
Response.Redirect("../Default.aspx?Session=expired");
}
LoginAuthentication loginAuth = new LoginAuthentication();
LoginVariables loginVar = loginAuth.getSession();
if (!Page.IsPostBack)
{
companyId = loginVar.CompanyId;
if (Request.QueryString.Count > 0)
{
if (Request.QueryString["Id"].ToString() != null)
{
dtDataForMail = cUtil.GetEmpDetail(int.Parse(Request.QueryString["Id"].ToString()));
EmpCode = Request.QueryString["Id"].ToString();
loginEmpCode = int.Parse(loginVar.EmployeeID);
LoginType = "Manager";
}
isFiveRatingApplicable = cUtil.GetIsFiveRatingApplicable(EmpCode);
StatusCode = DevRevBAL.GetStatusCode(EmpCode);
switch (StatusCode)
{
case 2:
DisableControls();
btnSubmitLater.Visible = false;
btnSubmit.Visible = false;
break;
case 3:
DisableControls();
btnSubmitLater.Visible = false;
btnSubmit.Visible = false;
btnFinalize.Visible = true;
break;
case 4:
DisableControls();
btnSubmitLater.Visible = false;
btnSubmit.Visible = false;
btnFinalize.Enabled = false;
if (companyId == "0")
{
btnFinalize.Visible = true;
btnFinalize.Enabled = true;
txtHrComment.Enabled = true;
}
break;
case 5:
DisableControls();
btnSubmitLater.Visible = false;
btnSubmit.Visible = false;
btnFinalize.Enabled = false;
break;
default:
break;
}
}
else
{
EmpCode = loginVar.EmployeeID;
loginEmpCode = int.Parse(loginVar.EmployeeID);
LoginType = "Employee";
isFiveRatingApplicable = cUtil.GetIsFiveRatingApplicable(EmpCode);
StatusCode = DevRevBAL.GetStatusCode(EmpCode);
switch (StatusCode)
{
case 1:
btnSubmit.Visible = false;
btnSubmitLater.Visible = false;
btnFinalize.Visible = false;
txtEmpAreaForSkill.ReadOnly = true;
txtEmpAreaForDev.ReadOnly = true;
break;
case 2:
btnSubmit.Visible = false;
btnSubmitLater.Visible = false;
btnFinalize.Visible = true;
txtEmpAreaForSkill.ReadOnly = true;
txtEmpAreaForDev.ReadOnly = true;
txtEmployeeComment.ReadOnly = false;
break;
case 3:
btnSubmit.Visible = false;
btnSubmitLater.Visible = false;
btnFinalize.Enabled = false;
txtEmpAreaForSkill.ReadOnly = true;
txtEmpAreaForDev.ReadOnly = true;
txtEmployeeComment.ReadOnly = true;
break;
case 4:
DisableControls();
btnSubmitLater.Visible = false;
btnSubmit.Visible = false;
btnFinalize.Enabled = false;
break;
case 5:
DisableControls();
btnSubmitLater.Visible = false;
btnSubmit.Visible = false;
btnFinalize.Enabled = false;
break;
default:
break;
}
}
DataTable dtData = cUtil.GetEmpDetail(int.Parse(EmpCode));
txtEmployee.Text = dtData.Rows[0]["EmpName"].ToString();
txtBranch.Text = dtData.Rows[0]["Branch"].ToString();
txtDesignation.Text = dtData.Rows[0]["Designation"].ToString();
txtManager.Text = dtData.Rows[0]["Approver"].ToString();
JobRoleId = dtData.Rows[0]["JobRoleId"].ToString();
if (dtData.Rows[0]["Status"].ToString() != "True")
{
Menu1.Items.Add(new MenuItem { ImageUrl = "../Images/selectedtab1.png", Value = "0", Text = "" });
Menu1.Items.Add(new MenuItem { ImageUrl = "../Images/unselectedtab2.png", Value = "1", Text = "" });
Menu1.Items.Add(new MenuItem { ImageUrl = "../Images/unselectedtab4.png", Value = "3", Text = "" });
}
else
{
Menu1.Items.Add(new MenuItem { ImageUrl = "../Images/selectedtab1.png", Value = "0", Text = "" });
Menu1.Items.Add(new MenuItem { ImageUrl = "../Images/unselectedtab2.png", Value = "1", Text = "" });
Menu1.Items.Add(new MenuItem { ImageUrl = "../Images/unselectedtab3.png", Value = "2", Text = "" });
Menu1.Items.Add(new MenuItem { ImageUrl = "../Images/unselectedtab4.png", Value = "3", Text = "" });
}
Menu1.Items[0].Selected = true;
FillDevRevGridView();
FillTrainingListBox();
if (isFiveRatingApplicable == true)
{
// For Competencies Section
trRatingInstruction.Visible = false;
// For Development Actions Section
tblForFiveRating1.Visible = true;
// For Development Targets Section
lblDomesticMob.Visible = true;
rdDomMobStatus.Visible = true;
tblForFiveRating2.Visible = true;
// For Comments Section
lblHrComment.Visible = true;
txtHrComment.Visible = true;
}
}
EnableDisableControls();
}