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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как открыть несколько каналов TCP (Remoting) 
V
    Опции темы
CityAC
Дата 25.9.2007, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Мне нужно на сервере зарегистрировать 2 канала один для приема сообщений другой для отправки.
В книге .NET сетевое прогр-е для профи написано:
"Нельзя зарегистрировать в домене приложения два канала с одним и тем же именем. По умолчанию ТСР канал получает имя "tcp" . Для регистрации двух каналов необходимо изменить имя соответствующего канала в свойстве  ChanneName". 
Пробовал -  
Код

TcpChannel tcpchan = new TcpChannel(4747);
tcpchan.ChannelName = "tcp2";

Ошибка! cвойство СhannelName - ReadOnly smile 
Как же тогда его поменять?

UnregisterChannel первого канала и RegisterChannel второго канала не подходит т.к.  нужно чтоб оба канала работали одновременно.
Каналы создаю и регистрирую в кострукторе формы сервера.

Это сообщение отредактировал(а) CityAC - 25.9.2007, 22:31
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
CityAC
Дата 25.9.2007, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



код удаленного объекта:
Код

public class Proxy : MarshalByRefObject, IRemout
    {
        SqlConnection DBConnection;
        public DataTable LoadCallBase(string login, string passw)
        {
            DBConnection = new SqlConnection();
            DBConnection.ConnectionString = @"server=(local); uid=sa;pwd=;database=Taxi;Trusted_Connection=Yes";
            DBConnection.Open();
            // string query = @"USE taxi SELECT distinct dr.driver_id, p.*
            // FROM tx_drivers dr INNER JOIN tx_person p ON dr.person_id = p.person_id";
            string query2 = "Select* From tx_callbase";
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(query2, DBConnection);             

            da.Fill(dt);
            DBConnection.Close();

            return dt;
        }
    }

Этот код работает и возвращает клиенту таблицу.
Дополнительно нужно реализовать авторизацию
Клиент вызвывает этот метод передавая в параметрах свой логин и пароль.
Серверу нужно произвести авторизацию и по результатам вернуть таблицу(или не вернуть)
Проблема в том что я не могу понять как использовать переданные параметры.
Например я хочу сравнить логин и пароль с базой логинов в SQL2000  - это не проблема - сделал запрос в базу и вперед,
 но как мне скажем получить здесь доступ к контроллу  расположенному на  форме сервера.
 Типа в поле текст отобразить "Клиент {login}" авторизовался.
Наподобие как чат: на клиенте  написал - на сервере отобразилось.
В консольном сервере можно же на написать Console.WriteLine(login) . А здесь как?

Это сообщение отредактировал(а) CityAC - 26.9.2007, 02:25
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
HAL707
Дата 26.9.2007, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Ошибка! cвойство СhannelName - ReadOnly  
Как же тогда его поменять?


Ну, можно так попробовать
Код

 IDictionary props = new Hashtable();
 props["port"] = 0;
 props["name"] = "ch1";//имя канала задается только так
TcpChannel chan = new TcpChannel(props, clientProv, provider);
ChannelServices.RegisterChannel(chan, false);


Добавлено через 11 минут и 51 секунду
Цитата

 но как мне скажем получить здесь доступ к контроллу  расположенному на  форме сервера.
 Типа в поле текст отобразить "Клиент {login}" авторизовался.
Наподобие как чат: на клиенте  написал - на сервере отобразилось.
В консольном сервере можно же на написать Console.WriteLine(login) . А здесь как?


Чет я не понял... Что тут непонятного. На клиенте юзер вводит логин в какой-нить текстбокс, мы можем его дальше использовать для сообщений...
Проверяем на сервере так (в твоем случае)
public DataTable LoadCallBase(string login, string passw)
 делаем так, чтобы при неправильных логин-пароль возвращался null.
Соответственно на клиенте - если не null - гденить отображаем "Клиент такой-то авторизовался"

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

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

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

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


 




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


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

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