Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Служба-сервер, гибрид IIS, WebService 
:(
    Опции темы
Alexsar
Дата 17.8.2007, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.5.2005

Репутация: нет
Всего: 1



привет, All
есть задумка создать собственную службу, а затем подружить её с IIS.
служба должна выполнять свою работу и предоставлять функциональные возможности для клиентов(не браузеры)
веб сервер думается создать на основе ASP.NET.
а что касаемо службы - не нашёл инфы по созданию
вопросы: вообще возможно построить такой гибрид?
                что посоветуете, может другой подход?
                какие подводные камни могут быть?
                с чего начать?

хотелось бы пример, где чётко и последовательно предоставляется алгоритм создания службы
PM MAIL   Вверх
Alexsar
Дата 31.8.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.5.2005

Репутация: нет
Всего: 1



привет всем
я создал ASP сервер без поддержки IIS. для этого использовал System.Web.Hosting
сервер слушает запросы от клиентов с помощью сокета

 
Код

//принимаем новое соединение
Socket socket = myListener.AcceptSocket();
Console.WriteLine("Socket Type "+socket.SocketType);
if(socket.Connected)
{
   Console.WriteLine("\nClient Connected!!\n"+"=========\nClient IP {0}\n",socket.RemoteEndPoint);

   //Создаю массив байтов и принимаю данные от клиента
   byte[] bReceive = new byte[1024];
   int i = socket.Receive(bReceive,bReceive.Length,0);

   //преобразуем байты в строку
   string sBuffer =Encoding.ASCII.GetString(bReceive);
   
   //обработка и прочее
....
}


так вот в чём проблема, когда я обращаюсь через браузер к ресурсам (или на клиенте реализую подобный запрос), например http://localhost:8000/index.htm - то всё нормально, но вот есть потребность клиента передавать данные например с помощью метода UploadData. Сервер должен принять такие данные и должным образом обработать
делаю так

Код

string siteURL;
siteURL = "http://localhost:8000/index.htm";
WebClient client = new WebClient();
client.Credentials = System.Net.CredentialCache.DefaultCredentials;
string uploadString = "Hello Force..15";

client.Headers.Add("Content-Type", "application/client_data");

byte[] sendData = Encoding.ASCII.GetBytes(uploadString);
Console.WriteLine("Uploading to {0}.. ", siteURL);

byte[] recData = client.UploadData(siteURL, "POST", sendData);

Console.WriteLine("\nResponse recieved was {0}", Encoding.ASCII.GetString(recData));


но на сервер приходит только заголовок, там верно указывается число переданных байтов, прочая иформация, но полностью отсутствует сами данные
хочется узнать, как надо отправлять и принимать данные, чтобы не терять сами данные

p.s. подобные реализации с HttpWebRequest совместо с StreamReader, а так же реализация через OpenWrite так же теряют данные
p.p.s. Socket и TcpClient решают задачу, но хочется использовать UploadData или OpenWrite
PM MAIL   Вверх
Alexsar
Дата 9.9.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.5.2005

Репутация: нет
Всего: 1



в общем сам разобрался, надо было повторно прослушать сокет
PM MAIL   Вверх
Alexsar
Дата 14.9.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.5.2005

Репутация: нет
Всего: 1



Я создал службу, для управления ей написал програмку. Чтобы передать какие либо данные службе приходится останавливать и снова перезапускать её с новыми параметрами.
А теперь такой вопрос: как программно управлять службой? Хочется сделать простейший пользовательский интерфейс для обратной связи, но службы не приемлют такого, класс Form и производные от него не помогают тут
Может есть обходные манёвры, чтобы служба стала поддерживать хотя бы мессаджбоксы?

PM MAIL   Вверх
tol05
Дата 14.9.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 6
Всего: 170



не надоело еще самому с собой общаться?  smile (не обижайся, просто посмотрел, в топик никто не отвечает...)

Цитата(Alexsar @  14.9.2007,  21:57 Найти цитируемый пост)
как программно управлять службой?

класс ServiceController
Цитата(Alexsar @  14.9.2007,  21:57 Найти цитируемый пост)
Хочется сделать простейший пользовательский интерфейс для обратной связи, но службы не приемлют такого, класс Form и производные от него не помогают тут

помогают. Просто по умолчанию служба не поддерживает интерактивный режим. Потому что консоль всегда принадлежит текущему юзеру, а служба может запускаться не от имени юзера, владеющего консолью, а от имени другого юзера или от системмной учетной записи.

Обычно для включения интерактивного режима в консоли ("Администррование->Службы->Свойства_Нужной_Службы->Вход в систему"  -  это для XP) нужно чекбокс включить ("Разрешить взаимодействие с рабочим столом" или на английском - что-то там про interactive, не помню)...

Но нам стобой программно нужно. А .Net 2.0 (у меня счас другого нет) такой функциональности не предоставляет. Можно в .Net через записи в реестр, после того как installutil отработает:
Код

RegistryKey ckey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\MyServiceName", true);
if(ckey != null)
{
    if(ckey.GetValue("Type") != null)
    {
       ckey.SetValue("Type", ((int)ckey.GetValue("Type") | 256));
    }
}

Или через API можно, надо гуглить. 

найди книгу "С# 2005 для профессионалов" wrox-овскую. Там неплохо и программирование самих служб изложено, и управление службами.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Alexsar
Дата 15.9.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.5.2005

Репутация: нет
Всего: 1



ТО tol05
О, живая душа появилась smile 
значит всё таки можно, значит будем копать
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.