У меня есть библиотека контрактов, которая будет использоваться как клиентским приложением, так и сервисом WCF (повторно использовать существующую библиотеку).В этой библиотеке контрактов у меня есть асинхронный метод, который будет вызываться на стороне клиента.Когда я вызываю этот метод и пытаюсь вызвать WCF, пока его метод работает, WCF возвращает новый объект, и я теряю исходную ссылку на объект.Метод работает на другом объекте.Есть ли способ предотвратить потерю этой ссылки?Таким образом, можно продолжить вызов метода для того же объекта.
Библиотека контрактов:
[DataContract]
public class ComVariable
{
[DataMember]
public int ReadValue { get; set; }
public async void WriteReadValue()
{
Console.WriteLine(this.ReadValue);
await Task.Delay(5000);
Console.WriteLine(this.ReadValue);
}
}
Метод обслуживания WCF:
public class Service1 : IService1
{
public ComVariable GetComVariable(ComVariable comVariable)
{
//Complex reading algorithm from some device
comVariable.ReadValue++;
return comVariable;
}
}
Сторона клиента:
static void Main(string[] args)
{
ComVariable comVariable = new ComVariable();
comVariable.ReadValue = 1;
comVariable.WriteReadValue();
Service1Client service1Client = new Service1Client();
comVariable = service1Client.GetComVariable(comVariable);
Console.Read();
}
Я хочу видеть 1 и 2 на экране консоли, но асинхронный метод старого объекта comVariable не зависит от вызова веб-службы.Но на консоли записывается 1 и 1.
Я могу просто выровнять свойства объектов после вызова wcf:
comVariable.ReadValue = service1Client.GetComVariable(comVariable).ReadValue;
Это будет работать, но я не хочу этого делать, потому что ябудет иметь список и класс ComVariable будет иметь так много свойств, которые должны быть выравнены.