Ответ 1
Все ваши потребности будут удовлетворены в следующих статьях из MSDN:
У меня есть служба WCF, которую я вызываю из службы Windows.
Служба WCF запускает пакет SSIS, и этот пакет может занять некоторое время, и я не хочу, чтобы моя служба Windows должна была ждать, пока она закончится.
Как я могу сделать мой вызов службы WCF асинхронным? (или по умолчанию он асинхронный?)
Все ваши потребности будут удовлетворены в следующих статьях из MSDN:
В Visual Studio 2010 установите флажок Add Service Reference > click Advanced button > check the Generate Asynchronous Operations
.
После этого операции Async будут добавлены и будут доступны для вашего использования.
Сфера обслуживания:
[ServiceContract]
public interface IMyService
{
[OperationContract]
bool DoWork(int i);
}
Клиентская сторона:
[ServiceContract(Name = nameof(IMyService))]
public interface IMyServiceClient : IMyService
{
[OperationContract]
Task<bool> DoWorkAsync(int i);
}
Прокси-сервер WCF внутри вашего клиента (служба Windows?) должен быть указан при создании, что вы хотите иметь доступные асинхронные операции.
Вы можете изменить существующий прокси-сервер WCF, щелкнув его правой кнопкой мыши и выбрав "Настроить сервисную ссылку". Здесь вам нужно просто установить галочку рядом с "Генерировать асинхронные операции"
Хорошо, так что это сторона прокси-сервера WCF, о которой позаботились. Теперь вам нужно использовать APM (асинхронную модель программирования) с прокси-сервером внутри вашего клиента.
Я искал простой ответ на этот вопрос в течение нескольких дней, и я просто нашел то, что сработало для меня.
На всякий случай, если это кому-то нужно, и он хочет провести более глубокое изучение после того, как обратитесь к: