Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.98/46: Рейтинг темы: голосов - 46, средняя оценка - 4.98
10 / 10 / 1
Регистрация: 02.10.2013
Сообщений: 41

Подключения к службе с удаленного ПК

02.07.2014, 22:18. Показов 9355. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Вот попался мне проект:
Есть фирма которая продает что-то
Торговые агенты этой фирмы ездят , продяют товары.Как только продали ( у них ноут есть ) они заполняют в прогамме нужные поля, нажимают ОК и все это летит на сервер ( на фирму) там обновляется база данных.
Думаю суть уловили

как зделать вот ЭТУ связь между агентами и фирмой с помощю WCF дестанционно. На одном ПК не проблема =) А вто на ростаянии... Поделитесь, помогите.

Добавлено через 9 часов 27 минут
Ну если тяжело (впадло) выложить app.config то хоть намекните что , куда...
Я уже и порты пооткрывал... не знаю.
Ну вот мой локальный IP 196.168.1.3

Вот app.config служби :
XML
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
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="NewBehavior0">
                    <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <bindings />
      <services>
      <service behaviorConfiguration="NewBehavior0" name="WCF_BankService.BankService">
        <endpoint address="net.tcp://192.168.1.3:11000/BankService/ep1" binding="netTcpBinding"
            bindingConfiguration="" contract="WCF_BankService.IBankService" />
        <endpoint binding="mexTcpBinding" bindingConfiguration="" name="mex"
            contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://192.168.1.3/BankService" />
          </baseAddresses>
        </host>
      </service>
      </services>
    </system.serviceModel>
</configuration>
Вот хост служюы... или кодБихаинд ...

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
 
namespace WCF_BankService
{
    [ServiceContract]
    public interface IBankService
    {
        [OperationContract]
        void ToDeposit(double sum);
        [OperationContract]
        double GetBalance();
    }
 
    //[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
    public class BankService : IBankService
    {
        static int id = 0;
        public double Balance;
 
       
        public BankService()
        {
            ++id;
            Console.WriteLine("Create account № {0}",id);
        }
        // [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
        public void ToDeposit(double sum)
        {
            Balance += sum;
        }
 
        public double GetBalance()
        {
            return Balance;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(typeof(BankService));
            try
            {
                host.Open();
               // Uri address = OperationContext.Current.IncomingMessageHeaders.To;
               // Console.WriteLine(address); 
                Console.WriteLine("For Exit click ENTER");
                Console.ReadLine();
 
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                host.Close();
            }
               
        }
    }
}
А вот наш клиент любимый ...
app.config :
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBinding_IBankService">
                    <security mode="Transport" />
                </binding>
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://192.168.1.3/BankService/ep1" binding="netTcpBinding"
                bindingConfiguration="NetTcpBinding_IBankService" contract="ServiceReference1.IBankService"
                name="NetTcpBinding_IBankService">
                <identity>
                    <userPrincipalName value="MIXAJUBA\Администратор" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>
Ну и кодБихаинд

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using WCFBankClient.ServiceReference1;
 
namespace WCFBankClient
{
    class Program
    {
        static void Main(string[] args)
        {
 
            BankServiceClient proxy = new BankServiceClient();
            Console.WriteLine("Enter your sum a deposite :");
            double sum = Convert.ToDouble(Console.ReadLine());
 
            double result = 0;
 
            while( sum > 0)
            {
                proxy.ToDeposit(sum);
                result = proxy.GetBalance();
                Console.WriteLine("Deposit = {0} ", result);
                Console.WriteLine("Enter your sum a deposite :");
                sum = Convert.ToDouble(Console.ReadLine());
            }
 
            Console.WriteLine("To Exit click ENTER !");
            Console.ReadLine();
            proxy.Close();
 
        }
    }
}
======================================== ====

Работает.
А вот если я возьму статическую/динамическую IP , что бы клиент мог подключиться из МОРДАРА ...
Я не знаю как это вообще проделать.

Прошу вашей помощи.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.07.2014, 22:18
Ответы с готовыми решениями:

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

Узнать факт удаленного подключения
Здравствуйте, одному пользователю позвонили мошенники из &quot;сбербанка&quot;, заблокировали кабинет сбербанк онлайн. Но она не повелась и через...

Вызов окна удаленного подключения
Здраствуйте. Нужена функция подключения к интернет из VBA, в свойствах соединения есть созданное подключение с именем 'internet' вот его...

31
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
08.07.2014, 13:36
Студворк — интернет-сервис помощи студентам
apach сервер нужно отключить, тогда всё заработает
1
10 / 10 / 1
Регистрация: 02.10.2013
Сообщений: 41
08.07.2014, 14:07  [ТС]
зашел в XAMPP Contol Panel, сервак отключён



уффф... что же такое а... (((
Вы уж хоть не кидайте меня )) Вы один кто откликнулся и походу один кто хоть что-то понимает из 160 людей посмотревших эту тему.Может вспомните дайте сразу знать что куда.
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
08.07.2014, 14:33
Цитата Сообщение от MixaJuba Посмотреть сообщение
сервак отключён
ну такое не бывает.
Значит, что - то другое сидит и слушает порты
1
10 / 10 / 1
Регистрация: 02.10.2013
Сообщений: 41
08.07.2014, 14:55  [ТС]
Прописал в cmd команду netstat -aon



по PID нашел в Диспетчере Задач что держи\слушает порт.... System

0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
08.07.2014, 15:09
другой порт попробуйте дать
1
10 / 10 / 1
Регистрация: 02.10.2013
Сообщений: 41
08.07.2014, 15:21  [ТС]
Пробовал.Сразу пришла мысля такая.Как только меняю, перезапускаю IIS. System тут же подхватывает его.
Ну это и не удивительно , наверное.Вед IIS относиться к системе ...
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
08.07.2014, 15:51
В общем, я повторюсь, у вас установлен какой то сервер (RomPager) на компе, который принимает все запросы из вне. Что это такое, вам виднее должно быть)
1
10 / 10 / 1
Регистрация: 02.10.2013
Сообщений: 41
08.07.2014, 15:57  [ТС]
Я понял.
Спасибо что помогали!
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,246
08.07.2014, 16:06
MixaJuba,
посмотрите в панель упр-ия-администрирование-службы, те что запущены, может, там что есть
0
10 / 10 / 1
Регистрация: 02.10.2013
Сообщений: 41
08.07.2014, 20:00  [ТС]
Методом втыка и проб, изменил в Привязках Имя Узла (в IIS ):



и при запросе в браузере просит уже Имя и Пароль.


Перезагрузил роутер что б поменять IP.Новая айп.Старую теперь браузер не видит.Снова проделал выше сказанное.Новую АЙП видит и хочет Имя и Пароль.
И самое прикольное что я х*р его знает какой пароль и имя то

ну по умалчанию Имя:Администратор пароля нету...
должен уходить, нету времени дальше юзать... Может вы сталкивались ?

Запрос в браузере делаю только [ip]:[port]/
Начинаю залазить глубже.Ошибка про RomPager server



Object Not Found

The requested URL '/HelloService/HelloService.svc' was not found on the RomPager server.
Return to last page

Прийду попробую создать учетную запись в IIS....
0
0 / 0 / 0
Регистрация: 23.05.2015
Сообщений: 3
20.02.2017, 06:45
Можно было и так:
1) создать специально для проверки соединения более простую и наглядную службу, например, в виде библиотеки или в виде нескольких строк кода рядом с методом Main() в файле хоста(в контракте которой был бы один метод), см. готовый, работающий пример из книжки Троелсена, гл.25 или, лучше, Резника, гл 1
Служба могла бы быть такой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
[ServiceContract]
    public interface IStockService
    {
        [OperationContract]
        double GetPrice(string ticker);
    }
    public class StockService : IStockService
    {
        public double GetPrice(string ticker)
        {
            return 95.85;
        }
    }
Описание оконечной точки хоста могло бы быть примерно таким:
<endpoint address="http://localhost:26503/EssentialWCF"
binding="basicHttpBinding"
contract="EssentialWCF.IStockService" />
Здесь порт 26503 должен быть открыт для данного компьютера с помощью процедуры Port Forwarding .Порт 26503 не просто произвольное число, а порт, проброшенный на маршрутизаторе именно для этого компьютера (т.е., например, для компьютера с локальным IP-адресом 192.168.0.3)
2)создать консольное приложение хоста, в котором в файле .config была бы указана оконечная точка, задающая адрес, контракт, привязку (привязку, для начала, использовать самую простую -basicHttpBinding). Здесь можно было бы подставлять
очень просто разные Uri адреса , для эксперимента.
3)Создать специально для проверки соедининия консольное приложение клиента. Сгенерировать прокси-класс и конфигурационный файл для клиента из Visual Studio или с помощью svcutil.exe (как это сделать есть в вышеуказанных источниках)
4)Запусить приложение хоста. Здесь будет создан экземпляр класса ServiceHost, которому в конструкторе бедет указано название службы. Этот экземпляр станет владельцем службы (для работы с которой есть оконечная точка в файле .config клиентского приложения хоста). После создания объекта ServiceHost включится слушатель.
Весь код хоста может быть примерно таким:
C#
1
2
3
4
5
6
7
8
 public static void Main()
        {
            ServiceHost serviceHost = new ServiceHost(typeof(StockService));
            serviceHost.Open();
            Console.WriteLine("Для завершения нажмите <ENTER>.\n\n");
            Console.ReadLine();
            serviceHost.Close();
        }
5)Запустить клиента на том же компьютере, где и хост. Весь код клиента может быть примерно таким:
C#
1
2
3
4
5
6
7
8
static void Main(string[] args)
        {
            StockServiceClient proxy = new StockServiceClient();
            double p = proxy.GetPrice("msft");
            Console.WriteLine("Price:{0}", p);
            proxy.Close();
            Console.ReadLine();
        }
Описание оконечной точки клиента может быть таким:
XML
1
2
3
4
 <endpoint address="http://localhost:26503/EssentialWCF"
        binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IStockService" contract="ServiceReference1.IStockService"
                name="BasicHttpBinding_IStockService" />
6)Если все работает нормально, открыть порт 26503 в Брандмауэре Windows компьютера, на котором будет запускаться служба. (Пуск - Панель управления -Брандмауэр Windows -Дополнительные параметры - Правила для входящих подключений - создать правило - для порта - TCP -указать порт 26503).
7)Запустить клиента на другом компьютере локальной сети, изменив настройки в конфигурационном файле. Настройки могут быть такими:
<endpoint address="http://109.195.38.185:26503/EssentialWCF" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_I StockService" contract="ServiceReference1.IStockServic e"
name="BasicHttpBinding_IStockService" />
Здесь 109.195.38.185 - статический IP-адрес, выданный провайдером. Этот адрес присваивается маршрутизатору.
Порт 26503 будет, конечно, являться идентификатором процесса запущенной службы. Но, одновременно с этим, это число задействовано в технологии NAT для распознавания извне компьютера, на котором запущена служба. Ведь к роутеру могут быть подключены несколько компьютеров.
8)Если все работает, т.е. клиент подключается к запущенной службе удаленно, то следующий этап (если возникнет такая необходимость разместить службу в IIS)
9) Установить IIS.
10) Проверить открывается ли извне домашняя страница. Для этого в браузере удаленного компьютера набрать http://109.195.38.185:26503.
11)И т.д.
0
20.02.2017, 07:23

Не по теме:

Цитата Сообщение от alexfarm2 Посмотреть сообщение
Можно было и так:
alexfarm2, вы на некроманта учитесь? Посмотрите на дату последнего сообщения, ТС или уже все и без вас знает, или просто забил на это дело.
И да, тупо скопированный код из книги - не показатель. Вот если бы вы написАли что-то свое, было бы в разы лучше.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.02.2017, 07:23

Хостинг с возможность удаленного подключения к БД
Кто нибудь может подсказать хостинг с возможностью удаленного подключения к базе MySQL. Написал программу которая должна читать...

Установка удаленного подключения через XP
Вызвать окно &quot;Удаленное подключение&quot; или &quot;Подключение удаленного доступа&quot; в Win95 удается так: Private Sub Command1_Click() Dim...

Долгая защита удаленного подключения RDP
Доброго здоровья. Вдруг, значительно увеличилось время защиты подключения к удаленному рабочему столу сервера под управлением Windows...

Бесплатный MySql хостинг с возможностью удалённого подключения
Вечер добрый, подскажите, пожалуйста, хостинг, с возможностью удаленного доступа к mysql. Те есть, у меня есть своя программа, которой...

Бесплатный MySql хостинг с возможностью удалённого подключения
Уже долго мучаюсь, но никак не могу найти такой... Хостинг, с возможностью создния MySql базы - пожалуйста, а чтобы я со своего компьютера...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru