Независимо от того, что я пытаюсь: операция ввода-вывода была прервана либо из-за выхода потока, либо из-за запроса прил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* ownOverlapped)
в System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt) 32 Код ошибки , UInt32 numBytes, NativeOverlapped* pOVERLAP)

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



Еще один интересный факт:
Журналы SVCLog показывают мне, что исключение ввода-вывода происходит после интервала времени I. можно определить в
Настройки.
В этом примере это произойдет в первый раз после 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#»