2011-01-18 4 views
0

я нашел, если я определил метод обратного вызова, какфункция обратного вызова не может принять объект в качестве параметра

void call(object o) 

я получил следующую ошибку

Unhandled Exception: System.ServiceModel.CommunicationObjectFaultedException: The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state. 

При использовании

void call(string s) 

затем его хороший. Кто-нибудь знает причину.

ответ

1

Да, вы не можете использовать тип object. Операции (включая обратные вызовы) всегда должны знать точный тип параметра, иначе они не смогут выполнять сериализацию и десериализацию.

+0

Ladislav, если у меня есть два класса, D и B, оба являются сериализуемыми. Могу ли я определить обратный вызов с помощью вызова (B b) и передать объект D? Я нашел в этом случае, я также сталкиваюсь с той же ошибкой. Кстати, есть ли у вас больше документации об этом? – user496949

+0

Если у вас есть два разных класса, вам нужны два разных метода. Если D происходит от B, вы можете использовать единый метод, но вы также должны использовать KnownTypeAttribute в своем контракте данных B, чтобы информировать службу о типе D. Вы можете прочитать о контрактах данных здесь http://msdn.microsoft.com/en-us/library/ms733127.aspx –

+0

Если я не могу изменить класс B (например, B является частью .Net Framework), могу ли я использовать единственный метод? – user496949

Смежные вопросы