С чем различие между маркировкой метода WCF
[OperationContract(IsOneWay = true)]
атрибут и проверка генерирования асинхронного операционного флажка при добавлении сервисной ссылки?
Из того, что я читал, кажется, что асинхронная природа вызова должна только быть определена на стороне клиента. Если это так, какой смысл [OperationContract(IsOneWay = true)]
?
Прямо сейчас у меня просто есть следующий метод, работающий в методе WCF.
public void UpdateIndex(IndexElement[] indexElements)
{
// start the update on a new thread.
Thread thread = new Thread(() => UpdateIndexThread(indexElements));
thread.Start();
}
Я создал сервисную ссылку в коде своего клиента, и я просто звоню:
indexerClient.UpdateIndex(indexElements);
Где indexerClient
экземпляр моего сервиса WCF.
Это должно также работать? Это не кажется, это почти, как будто это ожидает потока для завершения перед возвратом.
Они очень разные.
На концептуальном уровне IsOneWay = true говорит, что шаблон обмена сообщениями - «запустил и забыл», а не, например, «запрос-ответ». То есть IOW = true означает, что есть сообщение от клиента к серверу, но нет ответа от сервера клиенту. Напротив, метод, не использующий IOW = true, обычно будет иметь ответное сообщение, даже если тип возврата недействителен (например, «пустое» сообщение).
Асинхронный шаблон определяет поведение клиентского кода - например, делает ли это блок ждет возвращаемого значения или нет. Асинхронность - это «локальная» вещь, подробности см. В этом блоге . У вас может быть асинхронный клиент для сервера синхронизации или клиент синхронизации для асинхронного сервера. WCF будет творить чудеса под капотом, чтобы предоставить вам любую модель программирования. Если у вас, например, шаблон обмена сообщениями «запрос-ответ» и используйте «generate async», сгенерированный клиент предоставит вам, например, метод, который вы можете вызвать async (например, отправить сообщение и получить обратный вызов при получении ответа).
Поэтому используйте «async» для «локальной модели программирования» и используйте IOW для «обмена сообщениями по сети».
Обратите внимание, что в вашем примере, если вы отметите метод IOW = true, я думаю, что нет причин для Thread.Start () в коде сервера. Вы можете просто выполнить работу прямо в потоке, который WCF предоставил вашему серверу.
Обратите внимание, что в вашем примере, если вы отметите метод IOW = true, я думаю, что нет причин для Thread.Start () в коде сервера. Вы можете просто выполнить работу прямо в потоке, который WCF предоставил вашему серверу.
Обратите внимание, что в вашем примере, если вы отметите метод IOW = true, я думаю, что в коде сервера нет причин для Thread.Start (). Вы можете просто выполнить работу прямо в потоке, который WCF предоставил вашему серверу.