powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF служба запускается только с правами админа
5 сообщений из 5, страница 1 из 1
WCF служба запускается только с правами админа
    #38622201
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
Написал неольшую WCF службу (читаю книгу по теме), которая является плагином к AutoCAD. Посредством этой службы взаимодействую с консолью AutoCAD из внешний приложений, не зависимо от того, какой именно процесс запущен: acad.exe или accoreconsole.exe (второй вариант не имеет COM API). Упрощённо код запуска службы выглядит так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
private static void RunService() {
  Ap.Document doc = cad.DocumentManager.MdiActiveDocument;
  try {
    Uri address = new Uri("http://localhost:8000/CadService");
    BasicHttpBinding binding = new BasicHttpBinding();
    binding.Name = "httpBinding";
    binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
    binding.Security.Mode = BasicHttpSecurityMode.None;
    host = new ServiceHost(typeof(CadService));
    host.AddServiceEndpoint(typeof(ICadService), binding, address);
    host.Open(); // I get an Exception here...
    if (doc != null) {
      doc.Editor.WriteMessage("Service launched.\n");
    }
  }
  catch (Exception ex) {
    if (doc != null) {
      doc.Editor.WriteMessage("Exception: {0}\n", ex.Message);
    }
  }
}


Пользователи работают в AutoCAD с ограниченными правами и в этом случае в строке кода, помеченной комментарием, я получаю исключение:
ExceptionException: HTTP could not register URL http:// :8000/CadServices/.
Your process does not have access rights to this namespace
(see http://go.microsoft.com/fwlink/?LinkId=70353 for details).
Если запускать AutoCAD с правами администратора, то служба запускается нормально. Можно ли запускать службу, хостящуюся в некотором приложении (в моём случае - в AutoCAD) не прибегая к правам администратора для запуска exe и не назначения юзеру дополнительных прав? Т.е. чтобы пользователь скопировал себе на компьютер мою DLL, загрузил её в AutoCAD и всё сразу бы работало, не требуя дачи разрешений от админа?

Спасибо.
...
Рейтинг: 0 / 0
WCF служба запускается только с правами админа
    #38622232
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

использование http байндинга обязательно? Эта служба будет доступна через сеть?

Может, перейти на tcp binding? В этом случае, если не ошибаюсь, админские права не нужны.
...
Рейтинг: 0 / 0
WCF служба запускается только с правами админа
    #38622239
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik,

Вообще планируется преимущественно локальное использование (в 90% случаев). Спасибо, попробую завтра на tcp.
...
Рейтинг: 0 / 0
WCF служба запускается только с правами админа
    #38622935
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikМожет, перейти на tcp binding? В этом случае, если не ошибаюсь, админские права не нужны.
Сначала вылезло сообщение от брэндмауэра, мол запретить или разрешить работу? Дал разрешение, служба запускается. Однако на стороне клиента получаю такое сообщение об ошибке:
Ошибка на стороне клиента"net.tcp://localhost:8000/CadService" не поддерживает запрошенное обновление. Это может быть вызвано несоответствием привязок (например, защита включена на клиенте, но не на сервере).

О каких обновлениях и защите речь? При настройке конечной точки сервиса я указывал SecurityMode.None.

Код запуска службы, с учётом модификаций под TCP сейчас такой:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
    private static void RunService() {
      Ap.Document doc = cad.DocumentManager.MdiActiveDocument;
      try {
#if HTTP
        Uri address = new Uri("http://localhost:8000/CadService");        
        BasicHttpBinding binding = new BasicHttpBinding();
        binding.Name = "my_binding";
        binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
        binding.Security.Mode = BasicHttpSecurityMode.None;
#elif TCP
        Uri address = new Uri("net.tcp://localhost:8000/CadService");
        NetTcpBinding binding = new NetTcpBinding();
        binding.Name = "my_binding";
        binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
        binding.Security.Mode = SecurityMode.None;
#endif

        host = new ServiceHost(typeof(CadService));
        host.AddServiceEndpoint(typeof(ICadService), binding, address);
        host.Open();
        if (doc != null) {
          doc.Editor.WriteMessage("Service launched.\n");
        }
      }
      catch (Exception ex) {
        if (doc != null) {
          doc.Editor.WriteMessage("Exception: {0}\n", ex.Message);
        }
      }
    }


Конфигурационный файл клиента выглядит так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <system.serviceModel>
    <client>
      <endpoint name ="my_binding"
                address ="net.tcp://localhost:8000/CadService"
                binding="netTcpBinding"
                contract="Bushman.CAD.Services.ICadService"/>
    </client>
  </system.serviceModel>
</configuration>
...
Рейтинг: 0 / 0
WCF служба запускается только с правами админа
    #38623629
МихаилР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

По умолчанию для tcp биндинга безопасность включена на уровне транспорта. Т.е. в настройках клиента нужно создать настройку биндинга и там явно выключить безопасность.
Ну или сделать это в коде при создании клиентского канала - как вам удобнее.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF служба запускается только с правами админа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]