Соединение трубы WCF прервано из-за ошибки # 109 - PullRequest
0 голосов
/ 29 марта 2012

Я проектирую службу WCF и клиента с обратным вызовом, используя именованный канал, когда сервер обрабатывает запрос от клиента, я получил ошибку № 109, и в итоге соединение канала было прервано.Ниже приведен файл трассировки со стороны сервера.В случае, если шрифт слишком мал, чтобы увидеть, я должен просто объяснить это:

Три исключения, отмеченные красным, произошли, когда запрос был сделан от клиента к серверу.Функция довольно проста, она передает одну строковую переменную на сервер.Эта ошибка # 109 (3 последовательных исключения, если это число что-то значит), и она не дает больше информации.И в этой деятельности трубное соединение в конце концов прервалось.Также, что странно, мы видим следующее действие после того, как «Полученные байты при соединении ...», «Обработка сообщения», оно фактически прошло, то есть обработка на стороне сервера была вызвана с переданным параметром.Это можно проверить в отладчике, потому что на стороне сервера операция получила передаваемую строку.Также внутри функции операции, если я попытаюсь

Dim callback = OperationContext.Current.GetCallbackChannel(Of ISSLServiceCallback)()
If DirectCast(callback, ICommunicationObject).State = CommunicationState.Opened Then 
   DoSomething()
End If

Это фактически входит в предложение If, которое, как я предполагаю, означает, что канал на самом деле пока жив.*

Tracing details

Ответы [ 2 ]

0 голосов
/ 23 июня 2016

Я знаю, что это старая ветка, но я столкнулся с точно такой же проблемой.

Оказалось, что клиентский прокси был закрыт следующим образом:

client.Abort();
client.Close();

.. а не что-то вроде:

try
{
    client.Close();
}
catch (Exception ex)
{
    client.Abort();
}

.. который избавился от всех ошибок в файле трассировки WCF.

0 голосов
/ 18 июня 2012

Это исключение означает, что стек канала WCF на стороне сервера обнаружил ошибку операционной системы ERROR_BROKEN_PIPE 109 (0x6D) The pipe has been ended.Это предполагает, что ваша клиентская сторона, возможно, уже отключилась, когда служба приходит, чтобы написать свой ответ или взаимодействовать с каналом обратного вызова.

Я знаю, что одной из причин ERROR_BROKEN_PIPE в NetnamedPipeBinding является определенный шаблон несоответствия ожиданий безопасности между соответствующими конфигурациями привязки клиента и сервера - я предлагаю вам проверить конфигурацию безопасности на согласованность обеих сторон.

Если вам нужна дополнительная помощь, опубликуйте свой код клиента и службы, конфигурацию конечной точки, трассировку стека и другие подробности о каждом исключении, которое вы видите в трассировке журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...