powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Клиент для restful WEB-сервиса
46 сообщений из 46, показаны все 2 страниц
Клиент для restful WEB-сервиса
    #38493396
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть restful WEB-сервис. Как и с помощью чего можно сделать простенького клиента, который висел бы в системе и периодически стучался к сервису и выполнял определенные операции с результатами (для этого уже есть библиотечка специальная). Первое, что приходит в голову это запуск в стандартном виндовом планировщике, но как то не солидно, не надежно - приложение отдельно, а настройика и контроль запуска отдельно. Нужно что-то типа службы, но при этом чтобы максимально легко было развернуть на клиентской машине.
Может есть возможность сделать такого клиента например на базе IIS или еще чего-нибудь готового?
Что скажете про quartznet и другие подобные тулзы?
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493419
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,

Развернуть IIS на клиенте - это безусловно очень простое решение. Совсем.

Самое правильное - это сервис. Quartz.Net - крутая штука. Вы уверены, что вам нужен настолько продвинутый планировщик? Что у вас за периоды такие?
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493450
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Максим Н,

Развернуть IIS на клиенте - это безусловно очень простое решение. Совсем.


Данными будут обмениваться как раз сервера, так что IIS не проблема, о везде есть.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493451
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Максим Н,
Самое правильное - это сервис. Quartz.Net - крутая штука. Вы уверены, что вам нужен настолько продвинутый планировщик? Что у вас за периоды такие?

Не уверен, поэтому и спрашиваю...
периоды самые простые, без наворотов.
Нужна некая запускалка, с контролем работы, возможностью запуска под нужным пользователем ОС и т.д.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493455
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда более подробно рассказывайте


какие требования, какая периодичность, какие клиенты и так далее. На общие вопросы можно получить только общие ответы
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493465
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79тогда более подробно рассказывайте


какие требования, какая периодичность, какие клиенты и так далее. На общие вопросы можно получить только общие ответы
Есть около 30 серверов в интрасети.
Между ними планируется наладить обмен информацией с помощью restful web-сервисов.
(web-сервис будет установлен либо на одном центральном сервере и к нему все будут ломиться, или(и) на всех серверах, и основной сервер сможет их дергать по своей инициативе).
Встал вопрос как будет выглядеть клиент для общения с такими сервисами.
Клиент, который сможеть периодически слать запросы сервисам.
Предполагается, что он будет раз в 5 (10, 15, etc) минут "стучать" на сервер и проверять нет ли чего нового для него.

Что нужно:
- простота разворачивания на машинах ("далее, далее, готово" (с))
- при этом чтобы этот клиент(служба) был на виду, администратор мог управлять им штатными виндовыми средствами (время запуска, "окна", пользователь ОС) и т.д.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493472
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,

Ну что ж, на всякий случай, если еще принимаются варианты: рассмотрите архитектуру с обменом сообщениями через очереди, например, MSMQ. В описанном вами случае это оптимальный выбор.

Если все-таки только web-сервисы, то мое мнение: сделать централизованную систему с выделенным сервисом-диспетчером на IIS. А клиенты - windows-сервисы и Quartz.Net (таймеры, слипы, WaitHandle на таких промежутках я бы не реализовывал сам). Сервисы - это друзья администратора. Их установку можно прописать в политики домена.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493534
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
стоит ли поднимать iis, обыкновенной консоли достаточно с обеих сторон, ну оберните их сервисом
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493593
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Максим Н,

Ну что ж, на всякий случай, если еще принимаются варианты: рассмотрите архитектуру с обменом сообщениями через очереди, например, MSMQ. В описанном вами случае это оптимальный выбор.

Спасибо, интересная мысль. Restful был выбран затем, чтобы доступ к сервисам могли иметь и другие клиенты (возможно не виндовые).
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493594
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиМаксим Н,
стоит ли поднимать iis, обыкновенной консоли достаточно с обеих сторон, ну оберните их сервисом
не понял мысль. Ведь сервис (веб) должен где то жить?
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493604
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НRestful был выбран затем, чтобы доступ к сервисам могли иметь и другие клиенты (возможно не виндовые).

Apache MQ к примеру :-)
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493686
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Максим НRestful был выбран затем, чтобы доступ к сервисам могли иметь и другие клиенты (возможно не виндовые).

Apache MQ к примеру :-)
как вариант, спасибо, рассмотрю :-)
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493690
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НЕсть restful WEB-сервис. Как и с помощью чего можно сделать простенького клиента, который висел бы в системе и периодически стучался к сервису

А по поводу периодичности - достаточно простого таймера.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493691
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493705
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
Мысль простая, сервис могжет хоститься априори хоть где....
я уже давал это пример.
1 Мастерим консольное приложение.
2 добавляем референд на тынц nuget в частности на Nancy.Hosting.Self
прибираем консоль что бы выглядела так.
Код: 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.
 class Program
    {
        static void Main(string[] args)
        {
            var nancyHost = new Nancy.Hosting.Self.NancyHost(new Uri("http://localhost:1234"));
            nancyHost.Start();

            Console.ReadLine();
            nancyHost.Stop();
        }
    }
    public class MainModule : Nancy.NancyModule
    {
        public MainModule()//аля роутер из мувеце
        {
            Get["/"] = _ => "Hello World!";

            Get["/hello/{name}"] = parameters => "Hello " + parameters.name;

            Get["/favoriteNumber/{value:int}"] = parameters => "So your favorite number is " + parameters.value + "?";

            Delete[@"/products/(?<id>[\d]{1,7})"] = parameters => 200;

            Post["/users/{id}/add/{category}"] = parameters => HttpStatusCode.OK;
        }
      
    }


запускаем консоль, набираем в браузере http://localhost:1234
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493725
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493733
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиМаксим Н,
Мысль простая, сервис могжет хоститься априори хоть где....
я уже давал это пример.
1 Мастерим консольное приложение.
2 добавляем референд на тынц nuget в частности на Nancy.Hosting.Self
прибираем консоль что бы выглядела так.
Код: 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.
 class Program
    {
        static void Main(string[] args)
        {
            var nancyHost = new Nancy.Hosting.Self.NancyHost(new Uri("http://localhost:1234"));
            nancyHost.Start();

            Console.ReadLine();
            nancyHost.Stop();
        }
    }
    public class MainModule : Nancy.NancyModule
    {
        public MainModule()//аля роутер из мувеце
        {
            Get["/"] = _ => "Hello World!";

            Get["/hello/{name}"] = parameters => "Hello " + parameters.name;

            Get["/favoriteNumber/{value:int}"] = parameters => "So your favorite number is " + parameters.value + "?";

            Delete[@"/products/(?<id>[\d]{1,7})"] = parameters => 200;

            Post["/users/{id}/add/{category}"] = parameters => HttpStatusCode.OK;
        }
      
    }


запускаем консоль, набираем в браузере http://localhost:1234

Спасибо, опробую.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493749
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,
Код: c#
1.
нативнщина


ну это каждый сам выбирает, какой почтой пользоваться.
захостить можно и на табуретке ( как говорил Остап)
Или Ты предлагаешь распределенку для этой г... задачи хостить на иисее?
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493763
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиМСУ,
Код: c#
1.
нативнщина


ну это каждый сам выбирает, какой почтой пользоваться.
захостить можно и на табуретке ( как говорил Остап)
Или Ты предлагаешь распределенку для этой г... задачи хостить на иисее?

На счет прописки самого web-сервиса я ничего не говорил.
Он живет и работает в составе веб-приложения на IIS.
Меня пока больше интересует как и где будет работать клиент.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493781
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
Максим НДанными будут обмениваться как раз сервера, так что IIS не проблема, о везде есть. ?
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493785
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиМаксим Н,
Максим НДанными будут обмениваться как раз сервера, так что IIS не проблема, о везде есть. ?
на всех серверах работает веб-приложение (сайт) как раз на IIS, а на его базе работают WEB-сервисы.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493799
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НГде-то в степиМаксим Н,
пропущено...
?
на всех серверах работает веб-приложение (сайт) как раз на IIS, а на его базе работают WEB-сервисы.
Ну это к МСУ, он по слухам в Почте России работает, ))) мы такая архитектура не понимай...
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493836
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиМаксим Нпропущено...

на всех серверах работает веб-приложение (сайт) как раз на IIS, а на его базе работают WEB-сервисы.
Ну это к МСУ, он по слухам в Почте России работает, ))) мы такая архитектура не понимай...

Извиняюсь, что запутал :)
все просто на самом деле:
есть 30 сайтов на 30 серверах (каждый работает на IIS).
Сайты работают, пользователи логинятся на них, чего то делают, все ок.
А теперь возникла задача "подружить" эти сервера, чтобы они могли общаться между собой, обмениваться сообщениями.
Самым простым способом показался: развернуть на каждом из них простенький веб-сервис (как обычное веб-приложение, коих и так десятки работает на серверах, механизм отлаженный), используя готовую инфраструктуру и все такое.
Вариант с мессадж брокером выглядит заманчиво,но придется его отдельно где то разворачивать, обдумывать как к нему конектится, как логиниться и тд.
А тут у нас уже все готово, но в описанной схеме не хватает некого "КЛИЕНТА", который бы выполнял запросы к веб-сервисам.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493855
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиИли Ты предлагаешь распределенку для этой г... задачи хостить на иисее?
1. Ну я бы не сказал, что это гавнозадача. При пиковой нагрузке > 1 тыс пользователй, это гавнозадача или задача?
2. Вариант с хостингом на IIS тоже адекватен, почему бы и нет. Особенно, когда нужно разместить свой REST сервис в контексте сайта.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493857
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиНу это к МСУ, он по слухам в Почте России работает, ))) мы такая архитектура не понимай...
Еще вчера в РЖД работал В Почте уважаемый Долбосева трудится.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493858
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
ну это какая то новогодняя сказка, жили были 30 серверов, и вот однажды ночью, когда все пользователи
уснули, эти сайты проснулись, и начали вести беседу между собой, один рассказал, кто заходил к нему в течении суток,
другой рассказал что пользователь Иванов хотел подломить его.
- Угу возмутились сервера, и сообща решили забанить Васю из Иваново..
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493861
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НВариант с мессадж брокером выглядит заманчиво,но придется его отдельно где то разворачивать, обдумывать как к нему конектится, как логиниться и тд.

У вас сайты все на IIS, зачем придумывать, используйте MSMQ

1) Это компонент сервера, ставится легко
2) Для использования сервиса нужно всего лишь быть авторизованным в домене, да и то, для использования списков рассылки в Active Directory
3) Использовать также очень просто - Message, MessageQueue - смотрите MSDN, примеры простейшие. Соответствующий биндинг есть и в WCF
4) при необходимости обеспечивается гарантированная доставка сообщений

У вас будут плюсы децентрализованной архитектуры с администрированием транспорта системными администраторами. Всяко лучше самописных поделок.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493866
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степивот однажды ночью, когда все пользователи
уснули, эти сайты проснулись, и начали вести беседу между собой
+1

Придется на каждый сервер ставить свой win-сервис, обрабатывающий web-сервис :-)
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493870
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиМаксим Н,
ну это какая то новогодняя сказка, жили были 30 серверов, и вот однажды ночью, когда все пользователи
уснули, эти сайты проснулись, и начали вести беседу между собой, один рассказал, кто заходил к нему в течении суток,
другой рассказал что пользователь Иванов хотел подломить его.
- Угу возмутились сервера, и сообща решили забанить Васю из Иваново..
Есть центральный сервер, вот он время от времени и раздает сообщения свои подчиненным. Они (подчиненные) в свою очередь ему могут отвечать, между собой не общаются.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493881
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Максим НВариант с мессадж брокером выглядит заманчиво,но придется его отдельно где то разворачивать, обдумывать как к нему конектится, как логиниться и тд.

У вас сайты все на IIS, зачем придумывать, используйте MSMQ

1) Это компонент сервера, ставится легко
2) Для использования сервиса нужно всего лишь быть авторизованным в домене, да и то, для использования списков рассылки в Active Directory
3) Использовать также очень просто - Message, MessageQueue - смотрите MSDN, примеры простейшие. Соответствующий биндинг есть и в WCF
4) при необходимости обеспечивается гарантированная доставка сообщений

У вас будут плюсы децентрализованной архитектуры с администрированием транспорта системными администраторами. Всяко лучше самописных поделок.

Зувчит заманчиво, надо обдумать.
Но ведь в любом случае нужен будет клиент, который будет отправлять сообщения в очередь и читать их от туда?
Поправьте пожалуйста если не прав.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493886
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Н,
авторЕсть центральный сервер, вот он время от времени и раздает сообщения свои подчиненным. Они (подчиненные) в свою очередь ему могут отвечать, между собой не общаются.
Так это обыкновенная трехзвенка,
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38493896
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим ННо ведь в любом случае нужен будет клиент, который будет отправлять сообщения в очередь и читать их от туда?

Не обязательно. Это уже зависит от вас. На MSMQ есть такое понятие как триггеры и правила. По приходу сообщения можно настроить фильтры и так далее, и тому подобное. Далее, запускается либо Com+ компонента (смотрите Enterprise Services ) либо экзешник, которым на вход подается сообщение
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38494263
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, смотрю в сторону MSMQ.
Думаю как бы это могло выглядеть, пока представляю так:
например машине А нужно доставить несколько сообщений машине Б.
А формирует сообщения и ломится в MSMQ, работающий на Б, по HTTP.
Сообщения оказываются в очереди на Б, дальше отрабатываются машиной Б, например по триггеру.
Так?
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38494301
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НА формирует сообщения и ломится в MSMQ, работающий на Б, по HTTP.

Зачем по Http? Вы комсомолец? Любите трудности?

Сервер A пишет в очередь B\private$\queue1
Это все. Далее, сама MSMQ берет на себя отправку сообщения на сервер В в очередь private$\queue1
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38494308
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Максим НА формирует сообщения и ломится в MSMQ, работающий на Б, по HTTP.

Зачем по Http? Вы комсомолец? Любите трудности?

Сервер A пишет в очередь B\private$\queue1
Это все. Далее, сама MSMQ берет на себя отправку сообщения на сервер В в очередь private$\queue1

Т.е. сообщение попадает из одной очереди в другую? Как?
Между серверами открыт только 80-й порт.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38494319
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
круто, ТС сознался в распределённой системе никак не связанных между собой веб-серверов только на второй странице обсуждения =)
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38494327
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneкруто, ТС сознался в распределённой системе никак не связанных между собой веб-серверов только на второй странице обсуждения =)

Сам в шоке :-)

Максим Н,
Вы же говорили, что у вас сеть из 30 серверов? Сейчас выясняется, что они практически друг с другом не связаны? Что мешает открыть еще несколько портов?
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38494361
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Снова извиняюсь, что ввел в заблуждение.

Arm79Konst_Oneкруто, ТС сознался в распределённой системе никак не связанных между собой веб-серверов только на второй странице обсуждения =)

Сам в шоке :-)

Максим Н,
Вы же говорили, что у вас сеть из 30 серверов? Сейчас выясняется, что они практически друг с другом не связаны?

Говорил, и что работают они в интрасети тоже помоему говорил.

Arm79 Что мешает открыть еще несколько портов?

Безопасность и немного здоровой бюрократии.
Что можете предложить?
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38494378
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НГоворил, и что работают они в интрасети тоже помоему говорил.

Ну да. Обычно в ИНТРАСЕТИ между серверами файерволов не ставят. Между сегментами обычно есть, а внутри - нет.

В принципе, это ваше дело, но для функционирования MSMQ нужен как минимум порт 1801/tcp.

Очередь сообщений
Системная служба очереди сообщений представляет собой инфраструктуру и средство разработки распределенных программ для обмена сообщениями в Windows. Такие программы способны осуществлять обмен данными между неоднородными сетями и отправлять сообщения между компьютерами, которые временно не могут установить подключение друг к другу. Служба очереди сообщений обеспечивает безопасность, эффективную маршрутизацию, поддержку отправки сообщений внутри транзакций, приоритетную отправку, а также гарантированную доставку сообщений.

Имя системной службы: MSMQ

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Прикладной протокол	Протокол	Порты
MSMQ			TCP		1801
MSMQ			UDP		1801
MSMQ-DCs		TCP		2101
MSMQ-Mgmt		TCP		2107
MSMQ-Ping		UDP		3527
MSMQ-RPC		TCP		2105
MSMQ-RPC		TCP		2103
RPC			TCP		135
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38495049
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Максим НГоворил, и что работают они в интрасети тоже помоему говорил.

Ну да. Обычно в ИНТРАСЕТИ между серверами файерволов не ставят. Между сегментами обычно есть, а внутри - нет.

В принципе, это ваше дело, но для функционирования MSMQ нужен как минимум порт 1801/tcp.

Очередь сообщений
Системная служба очереди сообщений представляет собой инфраструктуру и средство разработки распределенных программ для обмена сообщениями в Windows. Такие программы способны осуществлять обмен данными между неоднородными сетями и отправлять сообщения между компьютерами, которые временно не могут установить подключение друг к другу. Служба очереди сообщений обеспечивает безопасность, эффективную маршрутизацию, поддержку отправки сообщений внутри транзакций, приоритетную отправку, а также гарантированную доставку сообщений.

Имя системной службы: MSMQ

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Прикладной протокол	Протокол	Порты
MSMQ			TCP		1801
MSMQ			UDP		1801
MSMQ-DCs		TCP		2101
MSMQ-Mgmt		TCP		2107
MSMQ-Ping		UDP		3527
MSMQ-RPC		TCP		2105
MSMQ-RPC		TCP		2103
RPC			TCP		135


Интрасеть есть, но достаточно большая, со своими правилами и заморочками.
30 серверов - это 30 различных организаций (клиентов) и открывать порты придется в кажодй из них (где согласятся, где то откажутся, я бы на их месте сам наверное был против). А 80-й (443) порт открыт везде.
Какие возможны проблемы если организовать очередь на http?
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38495130
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НКакие возможны проблемы если организовать очередь на http?

Придется а) на каждом сервере IIS иметь б) так как MSMQ over HTTP использует SOAP, имеет ли смысл уже использование MSMQ?

В итоге что остается? Сеть, объединяющая 30 серверов разных организаций, которые не доверяют друг другу. Значит и домена никакого нет. Почему она интрасетью называется, непонятно.

Раз общение между ними возможно ТОЛЬКО с помощью Http(s), то остаётся только простенький Win-сервис написать, который умеет обращаться к Web-сервисам.

Зачем вам много инсталляций этого сервиса? Разве одного не достаточно, который будет иметь возможность опрашивать ВСЕ Web-сервисы?

Писать win-сервисы очень просто. Штатная заготовка в VS достаточно хороша. Я лично написал для себя проект, который работает как консоль (удобно отлаживать), но имеет возможность регистрировать себя в системе как сервис (имя_программы.exe -install имя_сервиса). Пришлось заморочиться, чтобы не зависеть от InstallUtil и иметь возможность регистрировать один и тот же код под разными именами служб.

Консоль и сервис в одном флаконе
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
using Common.Logging;
using System;
using System.Collections;
using System.Configuration.Install;
using System.Diagnostics;
using System.ServiceProcess;

// 1) Создаем проект как сервис
// 2) устанавливаем тип проекта в свойствах как консоль, а не Windows application
// 3) Добавляем к инсталляторам еще и EventLogInstaller, встроенный можно удалить при желании

namespace Kav.GameDev.Server.Core
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main(string[] args)
        {
            var logger = LogManager.GetCurrentClassLogger();

            if (args.Length == 0)
            {
                if (Environment.UserInteractive)
                {
                    logger.Info("Программа запущена в консольном режиме");

                    try
                    {
                        using (var worker = new ServiceWorker(ServiceWorker.GetIterationTimeout(), ServiceWorker.GetEmergencyTimeSpan()))
                        {
                            worker.Start();

                            Console.WriteLine("Приложение запущено и работает");
                            Console.WriteLine("Нажмите <ENTER> для завершения приложения");
                            Console.ReadLine();

                            worker.Stop();
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex);
                        throw;
                    }
                }
                else
                {
                    logger.Info("Программа пытается запуститься как сервис");
                    ServiceBase.Run(new ServiceBase[] { new Service() });
                }

                // выход из программы
                logger.Info("Завершение работы приложения");
            }
            else
            {
                #region Управление сервисом

                if (args[0] == "-help")
                {
                    logger.Info("Вывод помощи");

                    Console.WriteLine("-help");
                    Console.WriteLine("-install SERVICE_NAME");
                    Console.WriteLine("-uninstall SERVICE_NAME");
                }

                if (args[0] == "-install")
                {
                    string serviceName = args[1];
                    using (ProjectInstaller projectInstaller = new ProjectInstaller { Context = new InstallContext() })
                    {
                        projectInstaller.Context.Parameters.Add("assemblypath", Process.GetCurrentProcess().MainModule.FileName);
                        foreach (Installer installer in projectInstaller.Installers)
                            installer.Context = projectInstaller.Context;

                        projectInstaller.ServiceInstaller.ServiceName =
                             projectInstaller.ServiceInstaller.DisplayName =
                                  projectInstaller.EventLogInstaller.Source = serviceName;

                        IDictionary dictionary = new Hashtable();
                        try
                        {
                            projectInstaller.Install(dictionary);
                            projectInstaller.Commit(dictionary);

                            logger.Info(m => m("Сервис {0} инсталлирован успешно", serviceName));
                        }
                        catch (Exception ex)
                        {
                            projectInstaller.Rollback(dictionary);

                            logger.Error(m => m("Сервис {0} вызвал ошибку при инсталляции", serviceName), ex);
                        }
                    }
                }

                if (args[0] == "-uninstall")
                {
                    string serviceName = args[1];
                    using (var projectInstaller = new ProjectInstaller { Context = new InstallContext() })
                    {
                        projectInstaller.Context.Parameters.Add("assemblypath", Process.GetCurrentProcess().MainModule.FileName);
                        foreach (Installer installer in projectInstaller.Installers)
                            installer.Context = projectInstaller.Context;

                        projectInstaller.ServiceInstaller.ServiceName =
                             projectInstaller.ServiceInstaller.DisplayName =
                                  projectInstaller.EventLogInstaller.Source = serviceName;
                        try
                        {
                            projectInstaller.Uninstall(null);

                            logger.Info(m => m("Сервис {0} деинсталлирован", serviceName));
                        }
                        catch (Exception ex)
                        {
                            logger.Error(m => m("Сервис {0} вызвал ошибку при деинсталлирован", serviceName), ex);
                        }
                    }
                }
                #endregion
            }
        }
    }
}

...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38495140
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
ServiceWorker(ServiceWorker.GetIterationTimeout(), ServiceWorker.GetEmergencyTimeSpan())


Жестокая проектировка класса...
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38495152
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ
Код: c#
1.
ServiceWorker(ServiceWorker.GetIterationTimeout(), ServiceWorker.GetEmergencyTimeSpan())



Жестокая проектировка класса...

Ерунда. Исторически так сложилось, я и не стал править. В шаблоне проекта лежит, кушать не просит.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38495271
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79кушать не просит.
Ок, фиг бы с ним.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38495337
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Максим НКакие возможны проблемы если организовать очередь на http?

Придется а) на каждом сервере IIS иметь б) так как MSMQ over HTTP использует SOAP, имеет ли смысл уже использование MSMQ?

В итоге что остается? Сеть, объединяющая 30 серверов разных организаций, которые не доверяют друг другу. Значит и домена никакого нет. Почему она интрасетью называется, непонятно.

Раз общение между ними возможно ТОЛЬКО с помощью Http(s), то остаётся только простенький Win-сервис написать, который умеет обращаться к Web-сервисам.

Зачем вам много инсталляций этого сервиса? Разве одного не достаточно, который будет иметь возможность опрашивать ВСЕ Web-сервисы?

Писать win-сервисы очень просто. Штатная заготовка в VS достаточно хороша. Я лично написал для себя проект, который работает как консоль (удобно отлаживать), но имеет возможность регистрировать себя в системе как сервис (имя_программы.exe -install имя_сервиса). Пришлось заморочиться, чтобы не зависеть от InstallUtil и иметь возможность регистрировать один и тот же код под разными именами служб.

Консоль и сервис в одном флаконе
Код: 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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
using Common.Logging;
using System;
using System.Collections;
using System.Configuration.Install;
using System.Diagnostics;
using System.ServiceProcess;

// 1) Создаем проект как сервис
// 2) устанавливаем тип проекта в свойствах как консоль, а не Windows application
// 3) Добавляем к инсталляторам еще и EventLogInstaller, встроенный можно удалить при желании

namespace Kav.GameDev.Server.Core
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main(string[] args)
        {
            var logger = LogManager.GetCurrentClassLogger();

            if (args.Length == 0)
            {
                if (Environment.UserInteractive)
                {
                    logger.Info("Программа запущена в консольном режиме");

                    try
                    {
                        using (var worker = new ServiceWorker(ServiceWorker.GetIterationTimeout(), ServiceWorker.GetEmergencyTimeSpan()))
                        {
                            worker.Start();

                            Console.WriteLine("Приложение запущено и работает");
                            Console.WriteLine("Нажмите <ENTER> для завершения приложения");
                            Console.ReadLine();

                            worker.Stop();
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex);
                        throw;
                    }
                }
                else
                {
                    logger.Info("Программа пытается запуститься как сервис");
                    ServiceBase.Run(new ServiceBase[] { new Service() });
                }

                // выход из программы
                logger.Info("Завершение работы приложения");
            }
            else
            {
                #region Управление сервисом

                if (args[0] == "-help")
                {
                    logger.Info("Вывод помощи");

                    Console.WriteLine("-help");
                    Console.WriteLine("-install SERVICE_NAME");
                    Console.WriteLine("-uninstall SERVICE_NAME");
                }

                if (args[0] == "-install")
                {
                    string serviceName = args[1];
                    using (ProjectInstaller projectInstaller = new ProjectInstaller { Context = new InstallContext() })
                    {
                        projectInstaller.Context.Parameters.Add("assemblypath", Process.GetCurrentProcess().MainModule.FileName);
                        foreach (Installer installer in projectInstaller.Installers)
                            installer.Context = projectInstaller.Context;

                        projectInstaller.ServiceInstaller.ServiceName =
                             projectInstaller.ServiceInstaller.DisplayName =
                                  projectInstaller.EventLogInstaller.Source = serviceName;

                        IDictionary dictionary = new Hashtable();
                        try
                        {
                            projectInstaller.Install(dictionary);
                            projectInstaller.Commit(dictionary);

                            logger.Info(m => m("Сервис {0} инсталлирован успешно", serviceName));
                        }
                        catch (Exception ex)
                        {
                            projectInstaller.Rollback(dictionary);

                            logger.Error(m => m("Сервис {0} вызвал ошибку при инсталляции", serviceName), ex);
                        }
                    }
                }

                if (args[0] == "-uninstall")
                {
                    string serviceName = args[1];
                    using (var projectInstaller = new ProjectInstaller { Context = new InstallContext() })
                    {
                        projectInstaller.Context.Parameters.Add("assemblypath", Process.GetCurrentProcess().MainModule.FileName);
                        foreach (Installer installer in projectInstaller.Installers)
                            installer.Context = projectInstaller.Context;

                        projectInstaller.ServiceInstaller.ServiceName =
                             projectInstaller.ServiceInstaller.DisplayName =
                                  projectInstaller.EventLogInstaller.Source = serviceName;
                        try
                        {
                            projectInstaller.Uninstall(null);

                            logger.Info(m => m("Сервис {0} деинсталлирован", serviceName));
                        }
                        catch (Exception ex)
                        {
                            logger.Error(m => m("Сервис {0} вызвал ошибку при деинсталлирован", serviceName), ex);
                        }
                    }
                }
                #endregion
            }
        }
    }
}



Да, с "интрасетью"я погорячился.
Идея с web-сервисами и одной управляющей виндовой службой интересная - не додумался до этого...
С IIS не проблема, т.к. он и так везде настроен и работает, web-сервис для него будет очередным web-приложением, которое он будет "показывать".

Есть еще один вопрос (правда наверное не со всем по теме...), было бы здорово услышать мнение:

помимо небольших сообщений (в большом количестве), которые можно легко обернуть в json(xml), а потом достать от туда, предполагается транспортировка файлов (причем довольно больших - до 100 Мб легко), с главного сервака на дочерние и обратно.

Была идея такая - захостить файлы на главном web-сервере, чтобы они были доступны по http(s), что то типа хостера файлов. Дальше передавать web-сервису дочернего сервера только описание такого файла(файлов) (имя файла, где на хостере можно забрать, куда у себя положить и т.д.). При обработке такого запроса дочерний сервак сам скачает его с хостера.
...
Рейтинг: 0 / 0
Клиент для restful WEB-сервиса
    #38495577
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может вам шарепоинт-портал посмотреть?
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Клиент для restful WEB-сервиса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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