Суть такова.
Создал WinForms-приложение сервер WCF (хост WCF) — использую netTcpBinding. Привожу только кусочки кода для понимания проблемы (по необходимости выложу весь).
ServiceHost _svcHost = new ServiceHost(typeof(ListenerContract));
_svcHost.Open();
Создал WinForms-приложение клиент WCF. Duplex канал
InstanceContext context = new InstanceContext(new ListenerCallback());
DuplexChannelFactory<IListenerContract> factory = new DuplexChannelFactory<IListenerContract>(context, "ListenerContract");
IListenerContract _listenerContract = factory.CreateChannel();
Запускаю. Все работает. Вызываю удаленно метод, приходит callback, все как положено.
Теперь этого же клиента только делаю ASP.NET приложением -- и тут засада...., НЕ РАБОТАЕТ !
Вызов метода сервера нормально проходит, а вот вызов callback метода (сервером) не проходит. На клиенте выскакивает неотловленный (внутренний Framework-а) Exception типа:
System.ServiceModel.Diagnostics.FatalException was unhandled
Message="Object reference not set to an instance of an object."
Source="System.ServiceModel"
inner Exception у него такой:
NullReferenceException {"Object reference not set to an instance of an object."}
Здравствуйте, Agent Smith, Вы писали:
AS>этот эксепшен мало о чем говорит, попробуй сделать трассировку. Меня она много раз спасала, когда WCF выдавала бред в виде эксепшенов
В том то и дело что я не могу протрассировать. Когда сервер вызывает колбэк метод клиента, я ставлю брекпоинт на входе этого метода клиента, но у меня туда не заходит. Ошибка вываливается где-то внутри в среде, показывается студийное окошко Exception-а, но место где сгенерировалась ошибка не показывает. Сервер же этот метод колбэка вызывает ивсе проходит на ура — никаких ошибок.
Я подозреваю, что реально запрос уходи на клиент, но при генерации средой потока или механизма, который дергает реальный колбэк метод клиента, где-то вываливает ошибка.
Здравствуйте, AlexOb, Вы писали:
AO>В том то и дело что я не могу протрассировать.
ты используешь system.diagnostics для трассировки? Что я имел в виду:
1) Нужно включить механизм трассировки WCF. Проще всего это сделать с помощью утилиты SvcConfigEditor, изменив app.config приложения (при этом в конфиг добавится секция <system.diagnostics>...</system.diagnostics>). Там же можно указать имя файла, куда будет записана информация о работе инфраструктуры WCF (собственно трассировка)
2) Запускаем приложение (с измененным конфигом), после падения приложения открываем трассировочный файл утилитой SvcTraceViewer и смотрим настоящие эксепшены
Обе вышеупомянутые утилиты входят в состав Windows SDK
С помощью трассировки мне удавалось поймать такие интересные (в контексте WCF) баги, как разница во времени между клиентом и сервером (по-умолчанию она не должна превышать 5 минут, кажется), при этом эксепшен о времени ничего не говорил и лишь после трассировки стала понятна причина..
Надеюсь, кому-нибудь поможет
Never argue with a woman who reads. It's likely she can also think. (c)
Здравствуйте, Agent Smith, Вы писали:
AS>ты используешь system.diagnostics для трассировки? Что я имел в виду: AS>1) Нужно включить механизм трассировки WCF. Проще всего это сделать с помощью утилиты SvcConfigEditor, изменив app.config приложения (при этом в конфиг добавится секция <system.diagnostics>...</system.diagnostics>). Там же можно указать имя файла, куда будет записана информация о работе инфраструктуры WCF (собственно трассировка) AS>2) Запускаем приложение (с измененным конфигом), после падения приложения открываем трассировочный файл утилитой SvcTraceViewer и смотрим настоящие эксепшены
AS>Обе вышеупомянутые утилиты входят в состав Windows SDK AS>С помощью трассировки мне удавалось поймать такие интересные (в контексте WCF) баги, как разница во времени между клиентом и сервером (по-умолчанию она не должна превышать 5 минут, кажется), при этом эксепшен о времени ничего не говорил и лишь после трассировки стала понятна причина.. AS>Надеюсь, кому-нибудь поможет
Ух ты, ща попробую. Но вот не буда, утилита SvcTraceViewer.exe почему-то отсутствует у меня на компе.
Не мог бы ты прислать мне ее alexob@mail.ru