Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы и WCF
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/47: Рейтинг темы: голосов - 47, средняя оценка - 4.72
0 / 0 / 1
Регистрация: 26.04.2020
Сообщений: 171
1

Как передать различные данные на сервер "WCF"

30.10.2020, 22:30. Показов 9568. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

В WCF хочу разными кнопками в WinForms выполнить различные действия на стороне сервера, по сути вызвать разные методы на сервере.

Модифицировал пример, получается вызвать только один метод, но второй - нет, потому как используется один интерфейс. Реализовать с двумя интерфейсам не выходит.
Как можно обойти проблему?

На сервере:

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
 static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(typeof(MyService), new Uri("http://localhost:1000/Service"));                  
            host.AddServiceEndpoint(typeof(ServiceApp), new BasicHttpBinding(), "");                                            
            host.Open();                                                                                                      
            Console.WriteLine("Server start");
            Console.ReadLine();
            host.Close();
        }
 
 [ServiceContract]
        public interface ServiceApp
        {
            [OperationContract]
            int serviceOff(int status);
            int serviceOn(int status);
        }
 public class MyService : ServiceApp                                                                                    
        {
            public int serviceOff(int status)
            {
                if (status != 1 || status < 1)     // Условие которое будет выполнять тот или иной метод, в зависимости от того что оправит клиент, 1 или 0.
                {
                    serviceOn(0);
                    return status;
                }
                
                Console.WriteLine("Start");
                return status;
            }
            public int serviceOn(int status)
            {
                
                Console.WriteLine("Stop")
                return status;
            }
        }
На клиенте:

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
 [ServiceContract]                                                                                         
 
        public interface ServiceApp
        {
           [OperationContract]
           int serviceOff(int status =1);                               //  <- как сюда передать значение 0-ноль при нажатии на button2 ?
        }
 
        private void button1_Click(object sender, EventArgs e)                                                   
        {
            try
            {
                Uri tcpUri = new Uri("http://localhost:1000/Service");                                            
                EndpointAddress address = new EndpointAddress(tcpUri);                                      
                BasicHttpBinding binding = new BasicHttpBinding();
                ChannelFactory<ServiceApp> factory = new ChannelFactory<ServiceApp>(binding, address);         
                ServiceApp service = factory.CreateChannel();                                                   
                                                                                                               
                label1.Text = service.serviceOff().ToString() + "Disabled";
                return;
            }
            catch
            {
                label1.Text = "No access";
            }
        }
 
 private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                Uri tcpUri = new Uri("http://localhost:1000/Service");                                                        
                EndpointAddress address = new EndpointAddress(tcpUri);                                              
                BasicHttpBinding binding = new BasicHttpBinding();
                ChannelFactory<ServiceApp> factory = new ChannelFactory<ServiceApp>(binding, address);              
                ServiceApp service = factory.CreateChannel();                                                      
                returnOn = service.serviceOff();
                label1.Text = service.serviceOff() + "Enabled";
                //numberStatus = 1;
                
            }
            catch
            {
                label1.Text = "No access";
            }                
        }
Я пробовал реализовать еще один интерфейс в котором уже будет присвоено значение 0, но если имя интерфейса на клиенте отличатеся от того что указано на сервере, действие не срабатывает на сервере при нажатии на button2.
Как разделить, что при нажатии button1 на сервер отправлялось 1, а при нажатии на button2 отправлялся 0-ль ? Тогда на сервере сработает условие, и вызовится нужный метод.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2020, 22:30
Ответы с готовыми решениями:

Как передать файл из клиента в сервер с помощью WCF
Знатоки, пожалуйста, скажите как передать файл из клиента в сервер с помощью WCF?

Как передать файл от клиента на сервер посредством WCF?
Гуру, помогите советом, пожалуйста. Для передачи файла могу ли я использовать ChannelFactory? Или...

Как передать большой файл в WCF? wcf Выдает ошибку 413 request entity too large
При попытке передать файл размером 81кб выдает ошибку,а файл размером 2800б передался успешно, как...

Как передать после авторизации все остальные данные из таблицы о клиенте в различные текстбоксы? Имя фамилия отчество
private void button1_Click(object sender, EventArgs e) { if (textBox1.Text ==...

Как программно передать данные на сервер в MSInet ?
Вот какая проблема. Использую MSInet.ocx. Хочу программно передать данные на сервер (скрипт...

3
0 / 0 / 1
Регистрация: 26.04.2020
Сообщений: 171
31.10.2020, 20:59  [ТС] 2
..вроде вышел из положения, передал нужное значение в параметрах

C#
1
2
3
4
public int returnOff;
 
ServiceApp service = factory.CreateChannel();                                                       
returnOff = service.serviceOff(0);                          // <- передал 0 в параметрах
0
78 / 67 / 13
Регистрация: 04.10.2018
Сообщений: 327
02.11.2020, 02:13 3
Baktery,

C#
1
2
3
4
[OperationContract]
int serviceOff(int status);
[OperationContract]
int serviceOn(int status);
И обновите службу на клиенте.
1
0 / 0 / 1
Регистрация: 26.04.2020
Сообщений: 171
02.11.2020, 19:58  [ТС] 4
Цитата Сообщение от Varyna Посмотреть сообщение
Baktery,

C#
1
2
3
4
[OperationContract]
int serviceOff(int status);
[OperationContract]
int serviceOn(int status);
И обновите службу на клиенте.

..кажись я так пробовал. Получаю ошибку:

System.ServiceModel.ActionNotSupportedException: "Сообщение с Action "http://tempuri.org/ServiceApp/serviceOn" не может быть обработано на стороне получателя из-за несоответствия ContractFilter на EndpointDispatcher. Возможно, это связано с несоответствием контрактов (несогласованность действий на стороне отправителя и получателя).

Добавлено через 7 минут
..а нет, работает. Это мой завтык, на сервере не дописал:

C#
1
2
[OperationContract]
int serviceOn(int status);
Работает, спасибо!)
0
02.11.2020, 19:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2020, 19:58
Помогаю со студенческими работами здесь

Как передать данные из формы в таблицу на сервер?
Доброго времени суток! Уже 3-й день ни как не могу сделать так, чтобы все работало. Мне необходимо,...

Может ли и как java Applet передать данные на сервер?
Подскажите может ли и как java Applet передать данные на сервер при этом не перегружаясь и без...

Как передать (не принять!) методом POST данные на другой сервер?
Нужно на перле из скрипта передать данные методом пост, т.е. сделать эмуляцию отправки данных формы...

Сервер telnet: как передать принятые данные в cmd и получить ответ
Всем привет! Пишу сервер на C#, работу с передачей и приёмом данных сделал. Как передать принятые...

Как правильно передать данные на сервер (файл+имя файла+команда на выполнение)
Почитал что такое можно реализовать с помощью ObjectOutputStream/ObjectInputStream но пишут что с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru