如果继承自System.EnterpriseServices.ServicedComponent都无法读取属性值,能解释原因也行,我现在就是郁闷,5555

解决方案 »

  1.   

    I never meet the issue,  show more codes ,pls
      

  2.   

    逻辑层:
    using System;
    using System.Data;
    using TransactionStudy.BaseTier;
    using TransactionStudy.Entity;
    using System.EnterpriseServices;
    namespace TransactionStudy.Logic
    {
    /// <summary>
    /// Summary description for TransactionLogic.
    /// </summary>

    //Begin a new Transaction
    [Transaction(TransactionOption.RequiresNew)] public class TransactionLogic:LogicBase
    {

    public TransactionLogic()
    {
    //
    // TODO: Add constructor logic here
    //
    }        private string _DocNo,_DocDescription;
    private DataTable _ItemList; public DataTable ItemList
    {
    set
    {
    this._ItemList=value;
    }
    } public string DocNo
    {
    set
    {
    _DocNo=value;
    }
    get
    {
    return this._DocNo;
    }
    } public string DocDescription
    {
    set
    {
    _DocDescription=value;
    }
    } public void Submit()
    {
    try
    {
    //Insert Head
    TransHead_Interface objHead=new TransHead_Interface();
    objHead.DocNo=this._DocNo;
    objHead.Description=this._DocDescription;
    objHead.Add();
    //Insert Detial
    TransDetail_Interface objDetail=new TransDetail_Interface();
    if(this._ItemList.Rows.Count>0)
    {
    for(int i=0;i<this._ItemList.Rows.Count;i++)
    {
    objDetail.ItemNo=_ItemList.Rows[i]["ItemNo"].ToString().Trim();
    objDetail.ItemDescription=_ItemList.Rows[i]["ItemDescription"].ToString().Trim();
    objDetail.Quantity=int.Parse(_ItemList.Rows[i]["Quantity"].ToString().Trim());
    objDetail.DocumentNo=this._DocNo;
    objDetail.Add();
    }
    ContextUtil.SetComplete();//Transaction Complete
    }
    else
    {
    throw new Exception("The Detial is Null,Please add Detial!");
    }
    }
    catch(Exception er)
    {
    ContextUtil.SetAbort();//Transaction filed,roll back
    throw er;
    }
    }
    }
    }
      

  3.   

    页面:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;using TransactionStudy.Logic;namespace TransactionDemo_Web
    {
    /// <summary>
    /// Summary description for TransactionDemo.
    /// </summary>
    public class TransactionDemo : PageBase
    {
    protected System.Web.UI.WebControls.DataGrid DataGridItemList;
    protected System.Web.UI.WebControls.Label LabelDocumentNo;
    protected System.Web.UI.WebControls.Label LabelExample;
    protected System.Web.UI.WebControls.Label LabelDescription;
    protected System.Web.UI.WebControls.TextBox TextboxDescription;
    protected System.Web.UI.WebControls.Label LabelItemNo;
    protected System.Web.UI.WebControls.TextBox TextboxItemNo;
    protected System.Web.UI.WebControls.Label LabelItemDescription;
    protected System.Web.UI.WebControls.TextBox TextboxItemDescription;
    protected System.Web.UI.WebControls.Label LabelQuantity;
    protected System.Web.UI.WebControls.TextBox TextboxQuantity;
    protected System.Web.UI.WebControls.Button ButtonAddItem;
    protected System.Web.UI.WebControls.Button ButtonSubmit;
    protected System.Web.UI.WebControls.Label LabelItemExample;
    protected System.Web.UI.WebControls.TextBox TextBoxDocumentNo;
    protected System.Web.UI.WebControls.Button ButtonReset; private DataTable dtItemList; private void Page_Load(object sender, System.EventArgs e)
    {
    // Put user code to initialize the page here //when first load the page,excute following code
    if(!Page.IsPostBack)
    {
    dtItemList = new DataTable();
    dtItemList.Columns.Add("ItemNo");
    dtItemList.Columns.Add("ItemDescription");
    dtItemList.Columns.Add("Quantity"); DataGridItemList.DataSource=dtItemList;
    DataGridItemList.DataBind();
    ViewState.Add("ItemList",dtItemList);
    }
    //PostBack excute following code
    else
    {
    if(ViewState["ItemList"]!=null)
    {
    dtItemList=(DataTable)ViewState["ItemList"];
    }
    }
    }
    private void ClearAll()
    {
    this.TextBoxDocumentNo.Text="";
    this.TextboxDescription.Text="";
    this.TextboxItemNo.Text="";
    this.TextboxItemDescription.Text="";
    this.TextboxQuantity.Text=""; dtItemList.Rows.Clear();
    DataGridItemList.DataSource=dtItemList;
    DataGridItemList.DataBind();
    ViewState["ItemList"]=dtItemList;
    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: This call is required by the ASP.NET Web Form Designer.
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {    
    this.ButtonAddItem.Click += new System.EventHandler(this.ButtonAddItem_Click);
    this.ButtonReset.Click += new System.EventHandler(this.ButtonReset_Click);
    this.ButtonSubmit.Click += new System.EventHandler(this.ButtonSubmit_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void ButtonAddItem_Click(object sender, System.EventArgs e)
    {
    try
    {
    DataRow dr=dtItemList.NewRow();
    dr["ItemNo"]=this.TextboxItemNo.Text.Trim();
    dr["ItemDescription"]=this.TextboxItemDescription.Text.Trim();
    dr["Quantity"]=this.TextboxQuantity.Text.Trim();
    dtItemList.Rows.Add(dr);
    DataGridItemList.DataSource=dtItemList;
    DataGridItemList.DataBind();
    ViewState["ItemList"]=dtItemList;
    }
    catch(Exception er)
    {
    throw er;
    }
    } private void ButtonSubmit_Click(object sender, System.EventArgs e)
    {
    try
    {
    TransactionLogic objTrans=new TransactionLogic();
    objTrans.DocNo=this.TextBoxDocumentNo.Text.Trim();
    objTrans.DocDescription=this.TextboxDescription.Text.Trim();
    objTrans.ItemList=this.dtItemList;
    objTrans.Submit();
    this.ClearAll();
    this.TextboxDescription.Text = objTrans.DocNo;//这句话执行后没有值
    this.ShowMessage("Trans Success!");
    }
    catch(Exception er)
    {
    this.ShowMessage(er.Message);
    }
    } private void ButtonReset_Click(object sender, System.EventArgs e)
    {
    this.ClearAll();
    }
    }
    }
      

  4.   

    借问,不好意思
    楼主,刚才你回答了我一个问题,我找不到你,只好在这里提问了
    http://community.csdn.net/Expert/topic/3248/3248889.xml?temp=.2782404我按照你说的,把
    [Transaction(TransactionOption.Required)]

    ContextUtil.SetComplete();
    Console.Read();都去掉了,
    果然好使,不过这样的话,我的两个事务就不同步了,那我应该怎么办,我想可能是我的组件注册不正确,除了没把它添加到全局程序集高速缓存,其他的都做了,希望能得到你的指教谢谢
      

  5.   

    有了[Transaction(TransactionOption.Required)],com+组件就启用了JIT。
    JIT每次调用后就释放,两次调用之间是不能保持状态的。所以_A不能保持。
    要保持状态,可以联合JIT和对象池。