2013-03-26 2 views
0

Я использую WCF-webservice и Linq-To-SQL, чтобы вставить новую запись.Изменения в webservice не отражаются на клиенте?

Однако в WebService я устанавливаю два поля, CreatedBy и Created, но даже если я использую ref параметр (как это было предложено on MSDN) изменения не отражаются на клиенте. Поэтому, когда я отлаживаю службу, свойства устанавливаются и запись вставлена ​​правильно, но при вызывающем методе свойства объекта все еще не заданы.

Это вызовет проблемы в дальнейшем, например, если я буду пытаться удалить его, я буду получать следующее исключение при db.SubmitChanges() поскольку эти столбцы являются non-null:

System.Data.SqlTypes.SqlTypeException: переполнение SqlDateTime , Должно быть между 01.01.1753 12:00:00 и 12/31/9999 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(); 
} 

Это метод вебсервис:

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 являются ржавыми (вот почему я их выбрал).

+1

Я полагаю, что даже через статус отмечен как ref, веб-служба не передает это значение. Вы пытались просто вернуть эту ценность? – Rob

+0

Я думаю, что это невозможно .. вам нужно получить данные обратно .. –

+0

проверить это: http://stackoverflow.com/questions/2882178/designing-wcf-interface-no-out-or-ref-parameters –

ответ

1

Вы не можете пройти по ссылке в веб-сервисе. Вы можете вернуть значение.

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(); 
} 
+0

Ваш удаленный ответ был закрыт. На самом деле я забыл обновить ссылку на службу, поэтому я не получил ошибку компилятора, что аргумент должен быть 'ref'. +1 за усилия, спасибо. –

Смежные вопросы