2012-05-24 2 views
1

Проблема: У меня есть служба WCF, которая вызывает методы через отражение и отправляет результаты. Как так:WCF Отправка объекта [] без добавления KnownTypeAttributes

[OperationContract] Object InvokeMemberByReflection(string typeName, string name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args);

Я делаю это потому, что у меня есть существующий API X, который я хочу вызвать. Я не хочу писать обертки для всех методов.

Я также не использую явные DataContracts, потому что сервер и клиент ссылаются на один и тот же набор DLL.

Однако для метода InvokeMemberByReflection выше, поскольку я отправляю параметры метода как массив объекта типа, похоже, что я должен добавить все возможные сигнатуры методов API X, как KnownTypeAttributes для работы DataContractSerializer.

Есть ли работа для этого? CLR в основном знает типы элементов, которые содержатся в массиве объектов. Может ли это не сериализоваться/десериализоваться на основе этого (при условии, что это совсем другой тип)?

Также я был бы признателен за любые другие шаблоны для решения такой проблемы. По очевидным причинам отражение слишком медленно.

+0

Какой API-интерфейс вы можете получить, когда может быть смысл обернуть все его методы в (тяжелых) вызовах веб-службы без какой-либо абстракции? –

+0

Это тестовый API, поэтому производительность здесь не проблема. – Kakira

+0

Тогда почему вы используете веб-службы? –

ответ

2

Если клиент и сервер используют одну и ту же DLL (то есть типы точно такие же), вы можете использовать NetDataContractSerializer, которому не нужен атрибут известных типов (он генерирует информацию типа CLR, когда сериализация). В This post приведен пример использования этого сериализатора.

+0

Ах, хорошо! Это сработало, спасибо! – Kakira

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

  • Нет связанных вопросов^_^