WCF и ASP.NET приложение
От: AlexOb  
Дата: 23.10.07 12:52
Оценка:
Суть такова.
Создал 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."}

Подскажите, как уйти от этой проблемы

Спасибо.
Re: WCF и ASP.NET приложение
От: AlexOb  
Дата: 25.10.07 19:31
Оценка:
Неужели никто не сталкивался или хоть теоретическиидею подкинет.
Страдаю от необходимости.
Re: WCF и ASP.NET приложение
От: Agent Smith Россия  
Дата: 26.10.07 08:29
Оценка:
этот эксепшен мало о чем говорит, попробуй сделать трассировку. Меня она много раз спасала, когда WCF выдавала бред в виде эксепшенов
Never argue with a woman who reads. It's likely she can also think. (c)
Re[2]: WCF и ASP.NET приложение
От: AlexOb  
Дата: 26.10.07 09:51
Оценка:
Здравствуйте, Agent Smith, Вы писали:

AS>этот эксепшен мало о чем говорит, попробуй сделать трассировку. Меня она много раз спасала, когда WCF выдавала бред в виде эксепшенов


В том то и дело что я не могу протрассировать. Когда сервер вызывает колбэк метод клиента, я ставлю брекпоинт на входе этого метода клиента, но у меня туда не заходит. Ошибка вываливается где-то внутри в среде, показывается студийное окошко Exception-а, но место где сгенерировалась ошибка не показывает. Сервер же этот метод колбэка вызывает ивсе проходит на ура — никаких ошибок.

Я подозреваю, что реально запрос уходи на клиент, но при генерации средой потока или механизма, который дергает реальный колбэк метод клиента, где-то вываливает ошибка.
Re: WCF и ASP.NET приложение
От: StanislavB  
Дата: 26.10.07 10:09
Оценка:
Возможно, проблема в том, что WCF в framework3.0 не работает с partial-trusted клиентом, которым скорее всего является ваше asp.net приложение.
Возможное решение тут:
http://www.leastprivilege.com/WCFProxiesInPartiallyTrustedASPNETApps.aspx
Re[3]: WCF и ASP.NET приложение
От: Agent Smith Россия  
Дата: 26.10.07 10:26
Оценка:
Здравствуйте, 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)
Re[4]: WCF и ASP.NET приложение
От: AlexOb  
Дата: 28.10.07 19:55
Оценка:
Здравствуйте, 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

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.