Коллекции упрощаются, когда они идут по проводам. Вы можете указать тип коллекции через IDE и командную строку (svcutil /collectionType
), но он будет применяться к всем коллекциям в API. Я думаю, что вы должны просто принять это и устранить несоответствие через код. В конечном счете, в сети коллекции представляют собой просто xml (по крайней мере, над стандартными привязками) - что-то вроде:
<items>
<item ...>...</item>
<item ...>...</item>
<item ...>...</item>
</items>
- следовательно, почему он не может определить (из схемы) между массивом (T[]
), List<T>
, HashSet<T>
и MyFunkyCollection<T>
.
Обратите внимание, что если вы используете совместное использование сборок (т.е. одна и та же сборка контракта на обслуживание находится на клиентском и сервере), то этого не произойдет, но это противоречит цели SOA / mex. Но этот подход используется довольно часто - следовательно, IDE поддерживает его напрямую и через командную строку через переключатель (svcutil /reference
).
Для IDE, поддерживающей его ... если вы записываете контракт на обслуживание и контракт на данные в библиотеке классов (dll), а затем добавляете ссылку на сборку (т.е. ссылку на dll или ссылку на проект) в эту библиотеку из двух проекты (серверный проект и клиентский проект). Теперь добавьте сервисную ссылку из клиентского проекта в конечную точку сервера (.svc). Если вы используете VS2008, он будет автоматически проверять локальные ссылки на типы и использовать их вместо генерации прокси - это означает: ваш клиентский код использует IwcfServerSync
из библиотеки классов, которая уже знает, использовать ли HashSet<T>
и т. Д.