Здравствуйте! Сегодня: Сб, 24 Авг 2019, Ваш IP: 18.232.171.18 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Общие вопросы программирования
+ Создать новую тему Страница: 1
Тема: C# WPF. Есть веб сервис, как служба может узнать что сервис запустился? · +  +  дата добавления: 12.08.2015 / 10:18
Автор темы:
dr.monstr
dr.monstr
тем: 12 / ответов: 61 / благодарностей: 0 / репутация: 6
ответов: 61
создал(а) тем: 12


Как веб-сервис может оповестить windows-службу о том, что он запустился?

Спасибо !
Технологии: C#
 
Ответ # 1 # · +x1 +  дата добавления: 12.08.2015 / 10:53
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Например, через файл или базу. Или служба может слушать какой-нибудь порт, на который веб-служба будет отправлять информацию о своем состоянии.

А напрямую, скорее всего не получится из-за ограничений безопасности. У веб-процессов, даже при наличии доступа к учетной записи супер-админа, много ограничений.
 
Ответ # 2 # · +  +  дата добавления: 12.08.2015 / 11:05
Автор ответа:
dr.monstr
dr.monstr
тем: 12 / ответов: 61 / благодарностей: 0 / репутация: 6
ответов: 61
создал(а) тем: 12


Служба слушает com-port. Я хочу сделать так, чтобы при запуске веб-сервиса, он подгрузил сохраненные данные за какое то время.

Может ли веб-сервис при запуске выполнить какие нибудь действия(метод)? Как я понял у него конструктор срабатывает только тогда когда начинаешь обращаться к конечной точке.
 
Ответ # 3 # · +  +  дата добавления: 12.08.2015 / 11:21
Автор ответа:
dr.monstr
dr.monstr
тем: 12 / ответов: 61 / благодарностей: 0 / репутация: 6
ответов: 61
создал(а) тем: 12


Т.е. мне нужно подгрузить данные при запуске WCF.
 
Ответ # 4 # · +  +  дата добавления: 12.08.2015 / 11:26
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Global.asax => Application_Start.

А в конструктор будет вызываться при каждом обращении к службе. Если что-то там и делать, то при помощи статичного класса, который выполнит загрузку нужных данных при первой инициализации и не позволит выполнять повторную загрузку. Но проще/правильней это через Application_Start делать.
 
Ответ # 5 # · +  +  дата добавления: 12.08.2015 / 13:35
Автор ответа:
dr.monstr
dr.monstr
тем: 12 / ответов: 61 / благодарностей: 0 / репутация: 6
ответов: 61
создал(а) тем: 12


Когда я просто запускаю wcf(веб-сервис), никуда не обращаясь то он в конструктор вообще не заходит. Заходит только тогда, когда я начинаю обращаться к одной из конечных точек. Т.е. кроме отлавливать исключения и Application_Start(пока еще не понял что это такое) никак нельзя сделать так, чтобы запустил wcf и он там что то отработал без захода в конечные точки?
 
Ответ # 6 # · +  +  дата добавления: 12.08.2015 / 13:39
Автор ответа:
dr.monstr
dr.monstr
тем: 12 / ответов: 61 / благодарностей: 0 / репутация: 6
ответов: 61
создал(а) тем: 12


У меня у wcf стоит режим Single - [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)], т.е. создается только один экземпляр. Нельзя ли этот экземпляр создать без захода в конечную точку, а то пока он только так и создается.

Сейчас просматриваю книгу WCF 4 и .NET 4 для профессионалов: автора Пабло Сибраро, параллельно смотрю в интернете информацию, пока ничего.
 
Ответ # 7 # · +x1 +  дата добавления: 12.08.2015 / 14:04
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Т.е. кроме отлавливать исключения и Application_Start(пока еще не понял что это такое)
Это событие запуска приложения. Когда рабочие процесс начинает жизненный цикл, происходит Application_Start. А при гибели процесса, естественным путем, происходит Application_End.

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

Если хочется, то дернуть службу тоже можно при запуске приложения (обычным способом, в качестве клиента).
 
Ответ # 8 # · +  +  дата добавления: 12.08.2015 / 15:21
Автор ответа:
dr.monstr
dr.monstr
тем: 12 / ответов: 61 / благодарностей: 0 / репутация: 6
ответов: 61
создал(а) тем: 12


Спасибо огромное! Помогло.

Ответ:
Если мы хотим чтобы wcf(веб-сервис) при запуске запустил какие нибудь методы(не конечные точки), то нужно в wcf добавить класс "Глобальный класс приложения" или "Global Application Class".

В нем вы увидите:
public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {

        }

        protected void Session_Start(object sender, EventArgs e)
        {

        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {

        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {

        }

        protected void Session_End(object sender, EventArgs e)
        {

        }

        protected void Application_End(object sender, EventArgs e)
        {

        }
    }

Спасибо Алексей!
 
Страница: 1 + Создать новую тему