web服务中的更改不会反映在客户端

本文关键字:客户端 服务 web | 更新日期: 2023-09-27 18:06:11

我使用WCF-webservice和Linq-To-SQL来插入一个新记录。

然而,在webservice中,我设置了两个字段,CreatedByCreated,但即使我使用ref参数(如MSDN上建议的),更改也不会反映在客户端。因此,当我调试服务时,属性被设置,记录被正确插入,但在调用方法中,对象的属性仍然未设置。

这将导致以后的问题,例如,如果我试图删除它,我会得到以下异常在db.SubmitChanges(),因为这些列是non-null:

System.Data.SqlTypes。SqlTypeException: SqlDateTime overflow。必须从1753年1月1日12:00:00 AM到9999年12月31日11:59:59 PM

下面是客户端(winforms应用程序)的插入方法:
private void Add_Status()
{
    using (var db = new ERP_ServiceClient())
    {
        var status = new Erp_ServiceReference.Status();
        status.Name = this.txtStatusNameAdd.Text;
        db.InsertStatus(status, this.IdUser);
        statusBindingSource.Add(status);
    }
    this.txtStatusNameAdd.Text = "";
    this.txtStatusNameAdd.Select();
}

这是webservice方法:

public void InsertStatus(ref Status status, int userID)
{
    using (var db = new ERPDataContext())
    {
        status.CreatedBy = userID;
        status.Created = DateTime.Now;
        db.Status.InsertOnSubmit(status);
        db.SubmitChanges();
    }
}

我做错了什么?我的wcf,winforms和linq-to-sql技能生疏了(这就是我选择它们的原因)。

web服务中的更改不会反映在客户端

在web服务中不能通过引用传递。可以返回值

public Status InsertStatus(Status status, int userID)
{
    using (var db = new ERPDataContext())
    {
        status.CreatedBy = userID;
        status.Created = DateTime.Now;
        db.Status.InsertOnSubmit(status);
        db.SubmitChanges();
        return status;
    }
}
private void Add_Status()
{
    using (var db = new ERP_ServiceClient())
    {
        var status = new Erp_ServiceReference.Status();
        status.Name = this.txtStatusNameAdd.Text;
        status = db.InsertStatus(status, this.IdUser);
        statusBindingSource.Add(status);
    }
    this.txtStatusNameAdd.Text = "";
    this.txtStatusNameAdd.Select();
}