Независимо от того, что я пытаюсь: операция ввода-вывода была прервана либо из-за выхода потока, либо из-за запроса прилC#

Место общения программистов C#
Ответить
Anonymous
 Независимо от того, что я пытаюсь: операция ввода-вывода была прервана либо из-за выхода потока, либо из-за запроса прил

Сообщение Anonymous »

Я пытаюсь создать простой инструмент async net tcp wcf, который будет открывать соединение, отправлять команду, получать ответ (список из 0–10 строковых предложений), закрывать соединение.

Проблема в том, что я всегда попадаю на (самостоятельную) сторону службы - независимо от того, что я пытаюсь - "Операция ввода-вывода была прервана либо из-за выхода потока, либо из-за запроса приложения", на стороне клиента, конечно, соответствующие ошибки, такие как «Существующее соединение было закрыто удаленным хостом», таймауты и т. д.

Я много пробовал за последние дни, но не могу от него избавиться.

Клиентская сторона (работает на .NET 4.0, вызывается раз в секунду):

Код: Выделить всё

void callservice(string mykey) {
ServiceReference1.Client c = new ServiceReference1.Client();
c.GetDataCompleted += c_GetDataCompleted;
try {
c.GetDataAsync(mykey);
}
catch (FaultException aa)
{
c.Abort();
}
}

private void c_GetDataCompleted(object sender, ServiceReference1.GetDataCompletedEventArgs e)
{
ServiceReference1.Client c = (ServiceReference1.Client)sender;
c.GetDataCompleted -= c_GetDataCompleted;
try
{
if (e.Result != null && e.Result.Length > 0)
{
... }
c.Close();
}
catch (Exception) {
c.Abort();
}
}
Серверная часть (работает на .NET4.5):

Код: Выделить всё

   [ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple,
InstanceContextMode=InstanceContextMode.PerCall,IncludeExceptionDetailInFaults=true)]
public class Service1 : IMyService
{
public async Task GetData(string whatkey)
{
List mydatalist = new List();
mydatalist= await Task.Run(() =>
{
...
});
return mydatalist;
}
Что там не так? Может быть, это вообще не имеет отношения к WCF? Что это может быть?

Исключение на стороне сервера:



System.Net.Sockets.SocketException, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Операция ввода-вывода была прервана из-за выхода из потока или запрос приложения

в System.ServiceModel.Channels.SocketConnection.HandleReceiveAsyncCompleted()
в System.ServiceModel.Channels.SocketConnection.OnReceiveAsync(отправитель объекта, SocketAsyncEventArgs eventArgs)
в System.Net.Sockets.SocketAsyncEventArgs.FinishOperationAsyncFailure(SocketError socketError, Int32 bytesTransferred, флаги SocketFlags)
в System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* NativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

System.Net.Sockets.SocketException (0x80004005): операция ввода-вывода была прервана из-за выхода из потока или запрос приложения
3E3



Еще один интересный факт:
Журналы SVCLog показывают мне, что исключение ввода-вывода происходит через промежуток времени, который я могу определить в
Настройки.
В этом примере это произойдет в первый раз после 00:02:39.
Моя интерпретация: он закрывает открытые соединения из-за имеющихся настроек, что вызывает исключение, поскольку операция ReceiveAsync, т.е. был еще открыт.

У меня вопрос: почему client.close() не закрывает его полностью и почему он еще не завершен, когда вызывает событие c_getdatacompleted-event? Почему операция «зависает» в течение 02:39 минут и не завершается?

(Если я не буду принудительно завершать работу через настройки пула соединений, у меня в конечном итоге будут сотни открытых операций, если я использую netstat i.ex. для отображения)

Подробнее здесь: https://stackoverflow.com/questions/150 ... ther-a-thr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»