Пожалуйста, помогите мне.Я застрял в одной ситуации с WCF.Я работаю над клиент-серверным приложением, где сервер предоставляет свои сервисы через дуплексный канал WCF.Весь механизм построен как шаблон Pub-Sub.Сервер выполняет удаленный метод в каждом подключенном к нему клиентском прокси и отправляет обновленную сущность в качестве аргумента.Клиентский прокси вызывает событие UpdateEntityEvent.Каждый клиентский модуль подписывается на это событие с помощью метода UpdateData (Entity ent), с помощью которого каждая часть программы получает новые или обновленные объекты.У меня никогда не было таких проблем до сих пор, когда я получил такое исключение в одном из модулей, чтобы быть более конкретным, ситуация не повторяется каждым клиентом.Однажды это произошло на одной клиентской станции для конкретного пользователя, у которого (если это имеет смысл) есть ноутбук с процессором i3, когда другие клиенты работают на «более слабых» машинах.Это ошибка:
<log4j:event logger="Client Application" timestamp="1291132669957" level="INFO" thread="WCF Layer"><log4j:message>User has started application and logged in with success.</log4j:message>
<log4j:event logger="Client Application" timestamp="1291133884092" level="FATAL" thread="11"><log4j:message>Type:
Source:
System.Windows.Forms
Method:
System.Object MarshaledInvoke(System.Windows.Forms.Control, System.Delegate, System.Object[], Boolean)
Mesage:
Object reference not set to instance of an object.
StackTrace:
w System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
w System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
w ClientApplication.Controls.RampDashboard.MyTasksControl.UpdateData(Entity entity)
w ClientDataProvider.DataProvider.UpdateEntityHandler.Invoke(Entity value)
w ClientDataProvider.DataProvider.UpdateEntityThread(Object obj) w C:\SomeDir\SomeFile.cs:row 380
w System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state)
w System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
w System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)
w System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)
InnerException:
<log4j:throwable>System.NullReferenceException: Object reference not set to instance of an object.
w System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
w System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
w ClientApplication.Controls.RampDashboard.MyTasksControl.UpdateData(Entity entity)
w ClientDataProvider.DataProvider.UpdateEntityHandler.Invoke(Entity value)
w ClientDataProvider.DataProvider.UpdateEntityThread(Object obj) w C:\SomeDir\SomeFile.cs:row 380
w System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state)
w System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
w System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)
w System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)</log4j:throwable><log4j:locationInfo class="ClientApplication.Program" method="CurrentDomainUnhandledException" file="" line="0" /></log4j:event>
Метод UpdateData () выглядит следующим образом:
private delegate void UpdateDataHandleDelegate(Entity entity);
/// <summary>
/// Updates the data.
/// </summary>
/// <param name="entity">The entity.</param>
private void UpdateData(Entity entity)
{
if (InvokeRequired)
{
Invoke(new UpdateDataHandleDelegate(UpdateData), entity);
}
else
{
// business logic here
}
}
Дополнительная информация о том, что объектный объект, который элемент управления получает через UpdateData, предоставляет некоторые данные, которыеиспользуется для заполнения коммерческого элемента управления Spreadsheet.Мой вопрос: что вызывает эту ошибку, NULL в объекте Entity, переданный в UpdateData, или это проблема Invoke.Если так, то как получается, что у него есть ссылка NULL в Invoke, когда UpdateData подписан на событие Update ранее, и у него никогда не будет шанса быть запущенным иначе, чем через процедуру подписки, которая вызывается в конструкторе элемента управления задолго после InitializeComponent ??Что здесь NULL, если это быловнутри объекта Entity ошибка не была бы более конкретной ??
Спасибо за любые идеи