Передача объекта в качестве параметра к сервису окон

Там некоторый путь состоит в том, чтобы передать объект службе окон? Я знаю метод myServiceController. Звезда (строка [] аргумент), но я должен передать более сложный объект, чем массив строк. На самом деле мне не нужен объект, который будет передан в качестве параметра, в чем я действительно нуждаюсь, то, что сервис может использовать объект, созданный в приложении форм окон. Я попытался использовать Систему. Сеть. Сценарий. Сериализация. JavaScriptSerializer. Сериализируйте метод для преобразования объекта в Json, но я не мог, потому что объект содержит циклическую ссылку. Я также пытался использовать указатели, но я не мог, потому что это - управляемый текстовый объект.

Какая-либо идея, что я могу сделать?

5
задан Leandro Galluppi 24 May 2010 в 22:19
поделиться

4 ответа

Самый простой способ - использовать автономную службу WCF. Если служба и клиент находятся на одном компьютере, вы можете использовать привязку именованного канала в памяти.

http://msdn.microsoft.com/en-us/library/system.servicemodel.net namedpipebinding.aspx

http://omegacoder.com/?p=101

или вы можете использовать tcp привязка, если клиент находится на другом компьютере http://msdn.microsoft.com/en-us/library/ms733769.aspx

2
ответ дан 14 December 2019 в 19:04
поделиться

Это полностью зависит от того, по каким каналам взаимодействует служба windows. Она может слушать как веб-служба, запускать проприетарный слушатель сокетов/портов, или (в .NET 4.0) смотреть файл в памяти или именованный канал.

В вашем вопросе упоминается метод (string[] args), который больше похож на метод командной строки "main". В таком случае, вы, вероятно, смотрите не на ту вещь, если это служба windows. Вы не запускаете EXE службы windows, чтобы передать ему аргументы....not, если хотите, чтобы он работал как служба.

Каждый из этих методов имеет свои особенности. Но в основном вы должны маршализировать свои данные через сериализацию ссылок или значений.

0
ответ дан 14 December 2019 в 19:04
поделиться

Я использую базу данных для обмена объектами между службой windows и приложением windows, используя XML в качестве формата кодирования и выполняя сериализацию самостоятельно. С базой данных вы можете обернуть взаимодействие в транзакции (для блокировки), добавить дополнительные поля для протоколирования, рассматривать таблицу как очередь и иметь удобное место для восстановления, если вам придется перезапускаться после сбоя.

0
ответ дан 14 December 2019 в 19:04
поделиться

Вместо того, чтобы пытаться передать объект itslef (что не будет работать, поскольку служба выполняется в отдельном процессе), передайте внешнюю ссылку на данные. Например, путь к файлу, содержащему сериализованный объект.

Полагаю, ваша служба также реализована в .NET? Если это так, то используйте двоичную сериализацию ( BinaryFormatter ), поскольку это будет обрабатывать циклические ссылки. Затем вы можете десериализовать свой сервис, загрузив его из указанного файла.

Вы можете подумать, что произойдет, если пользователь перезапустит вашу службу - откуда в этом случае он берет данные? Не будет никаких параметров запуска. Может быть более надежным использовать реестр для хранения имени файла сериализованного объекта, и ваша служба будет считывать его при запуске. Тогда он всегда найдет данные, даже если будет вызван без параметров запуска, как в случае перезагрузки компьютера или перезапуска службы пользователем.

3
ответ дан 14 December 2019 в 19:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: