WCF basicHttpBinding Client не закрывает сокетное соединение даже после вызова Close () - PullRequest
0 голосов
/ 24 ноября 2018

Мое решение заключается в реализации ServiceProxyClient с использованием .NET Framework 4.6.Я мог бы вызвать удаленный метод, и клиент открывает соединение с удаленным сервером в указанном порту.Но WCF не закрывает сокетное соединение явно.Я попытался перехватить все исключения и вызвать Abort () в блоке catch.Но сервис не бросает никаких исключений.Клиент ждет, так как более раннее сокетное соединение, открытое клиентом, все еще используется, и я получаю ошибку тайм-аута через 3 -4 минуты.

Вот пример кода

var client = new ServiceClient();
try 
{
  var response = client.SomeMethod(parmater);
  client.ChannelFactory.Close();
  client.Close();

 }
 catch (FaultException)
 {
     client.Abort();
 }
 catch (CommunicationException)
 {
     client.Abort();
 }
 catch(Exception)
 {
      client.Abort();
 }

При вызовах Close () и Abort () не закрывается соединение сокета, открытое для удаленного сервера,

Я сгенерировал ссылки на служебные прокси с использованием VS2017.Использование basichttpbinding для удаленной конечной точки.

<basicHttpBinding>
    <binding name="HttpService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    </binding>

Есть ли у нас какие-либо способы закрыть сокетное соединение с удаленным сервером со стороны клиента?

...