Самостоятельная настройка клиента Web API
Мне удалось запустить мой собственный WEP API с использованием OWIN в консольном приложении, запустив его с помощью кода, подобного следующему:
//string baseAddress = "http://192.168.1.6:8111/";
string baseAddress = "http://+:8111/";
// Start OWIN host
using (Microsoft.Owin.Hosting.WebApp.Start<Startup>(url: baseAddress))
{
Console.ReadLine();
}
Используя и регистрируя адрес, такой как " http://+:9000/", на компьютере хоста службы, идея заключалась в том, чтобы использовать общий IP-адрес для хоста, который не влиял бы на клиентов, когда IP-адрес хоста мог измениться.
Клиенты находятся на других компьютерах, отличных от того, на котором запущена служба. Что-то вроде мобильного телефона из локальной сети или другого ноутбука из локальной сети, а в будущем, если возможно, и вне локальной сети.
В клиенте моей собственной службы, которая представляет собой HTML-страницу, у меня есть код JavaScript, например:
//var uri = 'http://192.168.1.6:8111/api/tests';
var uri = 'http://+:8111/api/tests';
function Read()
{
$.getJSON(uri + '/' + id)
}
Используя статический закомментированный IP-адрес хоста в клиенте, я могу получить доступ к самодостаточному веб-API, но когда я пытаюсь использовать универсальный " http://+:9000/api/tests", он не может подключиться к оказание услуг.
Есть ли способ подключения клиента к службе с помощью такой общей конфигурации? или как мне настроить хост-машину службы и клиент так, чтобы изменение IP-адреса на хосте не останавливало службу на клиентской машине?
Я должен принять во внимание, что IP-адрес моей собственной машины может измениться, и клиенты потеряют соединение, так как они будут использовать старый устаревший IP-адрес хост-машины службы.
2 ответа
Если клиенты находятся в одной локальной сети, вы можете запросить хост по имени, а не по IP-адресу.
Чтобы найти имя хоста, откройте командную строку на хост-компьютере и введите: hostname
Например, будет показано имя хоста. myhost
, Тогда вы можете запросить его как http://myhost:8111
или каков бы ни был порт.
Для клиентов вне вашей локальной сети вы должны использовать DNS. Или подключитесь через VPN, если это возможно.
В вашем верхнем примере, где вы размещаете службу, прослушивающую определенный порт, вы указываете, что независимо от того, как запрос нашел сервер, прямой IP, разрешение DNS или что у вас, если он поступил через http и через порт 8111 затем отправьте его через ваш код.
Во втором вашем примере, javascript, вы делаете запрос. Этот запрос не может сказать отправить этот запрос на любой IP-порт 8111. Видите разницу?
Я хотел бы предположить, что сервер, который обслуживал javascript, также является тем, к которому вы хотите подключиться. Если это так, есть два варианта:
- Просто измените значение URI в вашем JavaScript на это:
var uri = '/api/tests';
- Сделайте ваш javascript динамическим, и пусть он использует Request.Url.Authority из запроса, который сгенерировал веб-страницу, содержащую javascript. Я воздержусь от примера, потому что я не знаю, что вы используете для доставки JavaScript.
Если это не так, то вы должны понимать, что клиент должен знать, где он должен сделать этот api / test / {id}.