
Базовый инструмент для работы с Revit Server внутри Revit-плагинов на .NET Framework 4.8.
Проект можно использовать как готовый браузер моделей и как основу для своих инструментов: пакетного экспорта, проверок, аудита структуры, массовой обработки.
- автоматически определяет версию Revit из
ExternalCommandData; - читает список серверов из
RSN.INI; - показывает WinForms-дерево структуры Revit Server;
- лениво загружает папки и модели по мере раскрытия;
- позволяет выбрать одну или несколько моделей;
- возвращает пути в формате
RSN://...и в "сыром" виде|Folder|....
| REST API | Native WCF API | |
|---|---|---|
| Способ | HTTP-запросы к публичному эндпоинту | Прямой вызов internal WCF-прокси Revit |
| Зависимости | WebClient | Internal сборки Revit (RS.Enterprise.*) |
| Скорость | Зависит от сети | Быстрее для больших структур |
| Авторизация | Требует прав на RevitServerAdmin | Использует текущую сессию Revit |
| Реализация | RevitServerClient | RevitServerNativeClient |
| Форма | RevitServerBrowserForm | RevitServerBrowserNativeForm |
Рекомендация: начинайте с REST. Если он недоступен или медленный — используйте Native.
- Версия Revit определяется автоматически, для REST формируется URL с годом.
- Серверы читаются из
C:\ProgramData\Autodesk\Revit Server <YEAR>\Config\RSN.INI. - Дерево подгружается лениво, при раскрытии узлов.
- Выбранные модели доступны через свойства
SelectedModelPaths(RSN://) иSelectedModelPathsRaw(внутренние пути).
- Внутренний:
|ProjectA|AR|Building.rvt - Для Revit API:
RSN://rs-main/ProjectA/AR/Building.rvt
RevitServerConfigReader.ReadServers(revitYear)– получить список серверов.RevitServerBrowserForm/RevitServerBrowserNativeForm– готовые формы.RevitServerClient/RevitServerNativeClient– низкоуровневые клиенты.RevitServerItem– модель папки/модели.
Обе формы автоматически определяют версию Revit и читают RSN.INI, достаточно передать commandData.
// REST-формаusing(varform=newRevitServerBrowser.RevitServerBrowserForm(commandData)){form.ConfirmButton.Click+=(s,e)=>{foreach(varpathinform.SelectedModelPaths)TaskDialog.Show("Модель",path);};form.ShowDialog();}// Native-форма – аналогичноusing(varform=newRevitServerBrowser.RevitServerBrowserNativeForm(commandData)){// ...}Если нужна только клиентская часть без UI:
using(varclient=newRevitServerClient(host,apiYear)){varitems=client.GetContents("|");}В проекте BatchIfcExporter браузер используется для выбора моделей перед экспортом IFC. После подтверждения выбора получаются SelectedModelPaths, которые передаются в пайплайн открытия и экспорта.
Разделяйте ответственность:
RevitServerBrowserотвечает за выбор моделей.- Ваш код – за бизнес-логику (открытие, экспорт, проверки).
RS– запускает REST-форму.RSNative– запускает Native-форму.
Обе зарегистрированы во вкладке ISTools через PluginsManager.
Стек: .NET Framework 4.8, Revit API, WinForms, WebClient, рефлексия.
REST endpoint:http://<host>/RevitServerAdminRESTService<year>/AdminRESTService.svc/<path>/contents
Заголовки:User-Name, User-Machine-Name, Operation-GUID.
Native WCF: использует сборки RS.Enterprise.Common.ClientServer.* и рефлексию для вызова ListSubFoldersAndModels.
Модель данных:RevitServerItem с полями Name, ItemType, Path, методами IsFolder/IsModel.
Таймаут REST: настраивается через client.Timeout.
Command.cs/CommandNative.cs– команды для Revit.RevitServerBrowserForm.cs/RevitServerBrowserNativeForm.cs– формы.RevitServerClient.cs/RevitServerNativeClient.cs– клиенты.RevitServerConfigReader.cs– чтение RSN.INI.RevitServerItem.cs– модель.TimeoutWebClient.cs– WebClient с таймаутом.
Собирается как RevitServerBrowser.dll. Требует RevitLogger.dll рядом. Зависит от RevitAPI.dll, RevitAPIUI.dll.
- Работает только внутри процесса Revit.
- Список серверов зависит от локального
RSN.INI. - Не открывает модели, только возвращает пути.
- Native-реализация зависит от internal сборок Revit и может измениться в новых версиях.
Используйте, если нужен готовый слой выбора моделей с Revit Server без написания:
- чтения
RSN.INI; - REST/Native клиентов;
- дерева папок и конвертации путей.
Прикладную логику стройте отдельно.
| Сценарий | Рекомендация |
|---|---|
| Стандартная работа | REST |
| Проблемы с доступом к REST API | Native |
| Максимальная производительность | Native |
| Стабильность важнее скорости | REST |
| Отладка проблем | REST (проще логировать) |
| Проблемы с авторизацией | Native (использует сессию Revit) |