Сетевая библиотека C#
Добрый вечер!
Создаю библиотеку на c# которая должна принимать входящий запрос и выполнять какие-то действия в зависимости от запроса с внешнего ресурса и отправлять в Terrasoft. Делаю с использованием HttpListener. Используя localhost в качестве источника проблем нет. Но если использовать внешний ресурс, то он не воспринимается (т.е. тишина - как будто ничего не происходит).
Внешний ресурс находиться в интернете, библиотека находиться в локальной сети. Т.е. между внешним ресурсом и библиотекой стоит маршрутизатор (роутер). Может в этом проблема?
Помогите разобраться. Заранее благодарю!
Нравится
Для сетевых протокола (TCP/UDP) не имеет значения локальная точка localhost или не localhost. На возможность подлючения может влиять антивирусы/файрволы/система безопастности самой ОС. О чем выше я вам и писал и приводил ссылку где описано как предоставить httplistener права на прослушивание внешних адресов.
Отдельного кодирования для использования Nat не нужно! (оно может понадобится для использования прокси классов но для Nat этого не нужно). Поэтому разберитесь что мешает вашему httplistener словить подключение. Проверьте например какие программы слушают ваш порт.
Попробуйте слушать все порты:
var Prefix = "http://*:9000/";
Проверьте что порт переброшен правильно что его не блокируют файрволы и так далее.
А почему вы остановились на HttpListener?, мне кажется что его использование оправдано в единичных случаях, те в большенстве случаев можно избежать его использования.
Порт проброшен правильно. Файервол проверял, даже выключал его - результат тот же. Я не остановился на HttpListener просто ранее не сталкивался с такой задачей, а на просторах интернета нашел только его с ожиданием запроса. Если будут другие предложения я готов их рассмотреть так как я новичок в этом вопросе.
Крылов Александр Юрьевич,
Опишите что вам нужно сделать, тогда возможно и будут предложения.
Так же обратите внимания на эту статью (Для проверки поместите вызов вашей кода в обычное WinForms приложение, остановите bpm и запустите ваше приложение сначало под обычным пользователем, а затем под администратором. Проверьте работу с удаленного уузла)
Григорий Чех,
Внешний ресурс посылает POST запрос. Необходимо узнать что послан запрос и обработать его.
Что сделал:
- запуск прослушивания:
public static HttpListener Listener = new HttpListener();
public Main()
{
string Prefix = "http://+:80/";
Listener.Prefixes.Add(Prefix);
Listener.Start();
Listen();
}
- ожидание запроса и его обработка:
private async void Listen()
{
while (true)
{
var context = await Listener.GetContextAsync();
// Обработка входящего запроса
}
Listener.Close();
}
Использую асинхронное принятие запросов т.к. может быть больше одного запроса одновременно.
Приведенный код работает только для http://localhost/.
Если всё работает или нет только в зависимости от домена, посмотрите в Fiddler, что происходит, ходят HTTP-запросы и ответы или же нет.
Также можно обойтись без отдельных библиотек, использовать для приёма запросов извне веб-сервис, созданный в конфигурации bpm'online, анонимный или с авторизацией.
Зверев Александр,
В Fiddler запросы ходят.
Библиотека создается для Terrasoft 3.x.
Тогда нужно смотреть Вашу программу во время отладки, чем отличается срабатывание от запроса внутри локальной сети и извне.
Как вариант вы можете создать обычное вэб приложение на asp.net а данные передавать в bpm через БД или используя web-service
Григорий Чех,
Я уже писал что создается не для bpm, а для Terrasoft 3.x.
А можно про asp.net поподробней?
В базу можно писать одинаково, хоть в 3.Х, хоть в 7.Х.
Видимо, речь о готовых шаблонах веб-приложений, доступных в Visual Studio.
Можно простой пример ожидания запроса и выполнение действий с поступившим запросом?
Григорий Чех,
Я знаю что их множество. Только они все используют localhost. и приведенный пример не исключение. С localhost проблем нет. Хотелось бы пример с запросом из внешнего ресурса (ресурс который бы находился за NAT).
Для сетевых протокола (TCP/UDP) не имеет значения локальная точка localhost или не localhost. На возможность подлючения может влиять антивирусы/файрволы/система безопастности самой ОС. О чем выше я вам и писал и приводил ссылку где описано как предоставить httplistener права на прослушивание внешних адресов.
Отдельного кодирования для использования Nat не нужно! (оно может понадобится для использования прокси классов но для Nat этого не нужно). Поэтому разберитесь что мешает вашему httplistener словить подключение. Проверьте например какие программы слушают ваш порт.
Попробуйте слушать все порты:
var Prefix = "http://*:9000/";