Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Windows Service (.NET Remoting) + Console Client

30K
10 января 2008 года
Nakamura
6 / / 05.11.2007
Создал dll, которая включает в себя класс, у которого есть public поле Name.

Создал Windows Service, где app.config представлен в виде:
<configuration>
<system.runtime.remoting>
<application name="WebCrawler">
<channels>
<channel ref="tcp server" port="8039">
<serverProviders>
<formatter ref="binary" includeVersions="false"/>
<provider type="RemotingExample.Security.ServerChannelSinkProvider, SecurityServer"/>
</serverProviders>
</channel>
</channels>
<service>
<wellknown mode="Singleton" type="WebCrawlerLibrary.Crawler,WebCrawlerLibrary" objectUri="Crawler.rem" />
</service>
</application>
</system.runtime.remoting>
</configuration>

Метод OnStart выглядит так:
try
{
string fileName = AppDomain.CurrentDomain.BaseDirectory + "CrawlerWinService.exe.config";
RemotingConfiguration.Configure(fileName, false);
WebCrawler.Crawler crawler = new WebCrawler.Crawler();
crawler.Name = "Hello World!";
RemotingServices.Marshal((crawler), "Crawler");
}
catch (Exception error)
{
}

Метод OnStop пустой.
Сервис проинсталил с помощью installutil, запустил его в службах.

Теперь клиент:

app.config:
<configuration>
<system.runtime.remoting>
<application name = "ConsoleClient">
<client>
<wellknown type="WebCrawlerLibrary.Crawler,WebCrawlerLibrary" url="tcp://localhost:8039/WebCrawler/Crawler.rem"/>
</client>
<channels>
<channel ref="tcp client">
<clientProviders>
<formatter ref="binary" includeVersions="false"/>
<provider type="RemotingExample.Security.ClientChannelSinkProvider, SecurityClient"/>
</clientProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>
</configuration>

Функция Main:
RemotingConfiguration.Configure(AppDomain.CurrentDomain.BaseDirectory + "ConsoleClient.exe.config", false);
string name = ((WebCrawler.Crawler)Activator.GetObject(typeof(WebCrawler.Crawler), "tcp://localhost:8039/WebCrawler/Crawler.rem")).Name;
Console.WriteLine(name);
Console.ReadLine();

При запуске клиента на строке RemotingConfiguration.Configure(...) вылетает с ошибкой "Сбой с исключением "System.Security.SecurityException: Данная сборка запрещает вызывающие стороны с частичным доверием." (дальше идет длинный кусок текста, содержащий лишь инфу о сборках).

Что я не правильно делаю? :(
713
11 января 2008 года
Ap0k
360 / / 13.03.2006
Google
30K
14 января 2008 года
Nakamura
6 / / 05.11.2007
Дописал [assembly: AllowPartyTrustedCallers()] в AssemblyInfo сервиса - не помогло. Попробовал вписать в AssemblyInfo клиента [assembly: System.Security.Permissions.RegistryPermission(System.Security.Permissions.SecurityAction.RequestMinimum, ViewAndModify = @"HKEY_CURRENT_USER\Software")] или [assembly: System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.RequestMinimum, Name="FullTrust")] - это вызвало иную ошибку: Error while trying to run project: Невозможно загрузить файл или сборку: "ConsoleClient, Version="1.0.0.0", Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Ошибка при предоставлении минимального набора запрошенных разрешений. (Исключение из HRESULT:0x80131417). Облазив инет так и не смог решить данную проблему - изменение Runtime Security Policy не помогло (ни StrongName на Assembly, ни URL на папку). Может все дело в системе (Vista Home Edition стоит на работе)? Какие еще возможные варианты решения проблемы?
30K
21 января 2008 года
Nakamura
6 / / 05.11.2007
И с чем может быть связана такая вот ошибка:
"Ошибкой завершилось следующее действие:
LinkDemand" при настройке службы удаленного взаимодействия."
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог