У меня есть веб-проект .Net Framework, который ссылается на службу WCF.
Я перевожу этот веб-проект в .Net Standard.Я добавляю ту же службу WCF, что и подключенная служба.Даже если служба WCF та же самая, я могу заметить 2 основных различия:
- Клиент имеет номер IDosposable;
- Сгенерированы только асинхронные методы.
Хорошо, я изменил весь мой код на поддержку асинхронных методов, но я не уверен, что способ расположения моего класса правильный ... Вот код:
public class MyCustomClient : IMyCustomClient
{
private bool _disposed;
WSClient _client;
public MyCustomClient()
{
this._client = new WSClient(WSClient.EndpointConfiguration.WSClientSoap12);
}
public async Task<MyResult> DoWorkAsync(...)
{
...
MyResult something = await this._client.DoWork();
...
return something;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (this._disposed)
return;
if (disposing)
{
if (this._client.State != System.ServiceModel.CommunicationState.Closed &&
this._client.State != System.ServiceModel.CommunicationState.Closing)
this._client.CloseAsync(); //Here the doubt... The Close method is async, but the dispose not....
this._client = null;
}
this._disposed = true;
}
}
Как вы можете видеть выше, Closeметод асинхронный, но утилита не .... Что мне нужно, так это то, что я должен открывать и закрывать клиент wcf для каждого HTTP-запроса, получаемого моим веб-проектом ... так какой же правильный способ избавиться от моего клиента-оболочки?
Спасибо ...