Мое решение заключается в реализации 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>
Есть ли у нас какие-либо способы закрыть сокетное соединение с удаленным сервером со стороны клиента?