{"id":1066,"date":"2017-10-28T16:08:42","date_gmt":"2017-10-28T19:08:42","guid":{"rendered":"https:\/\/www.semeru.com.br\/blog\/?p=1066"},"modified":"2019-07-31T17:39:19","modified_gmt":"2019-07-31T20:39:19","slug":"habilitando-acesso-externo-ao-iis-express","status":"publish","type":"post","link":"https:\/\/www.semeru.com.br\/blog\/habilitando-acesso-externo-ao-iis-express\/","title":{"rendered":"Habilitando acesso externo ao IIS Express"},"content":{"rendered":"<p>Fala pessoal atualmente eu estou desenvolvendo aplica\u00e7\u00f5es <strong>REST<\/strong> em <strong>ASP.NET<\/strong> e tive que testar uma <strong>API<\/strong> desenvolvida em outra m\u00e1quina. Por padr\u00e3o, o <strong>IIS Express<\/strong> n\u00e3o permite conex\u00f5es remotas e retorna o seginte erro <strong>&#8220;Bad Request \u2013 Invalid Host Name&#8221;<\/strong>. <a href=\"http:\/\/www.hanselman.com\/blog\/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx\"><em>Scott Hanselman<\/em><\/a> fez um post muito bem detalhado a esse respeito. No meu caso eu fiz algumas adapta\u00e7\u00f5es e nesse post, eu explico de uma forma mais resumida como habilitar o acesso externo ao <strong>IIS express<\/strong>. <\/p>\n<p><\/br><br \/>\n<strong>1\u00b0 Passo : Configurando o IIS Express<\/strong><br \/>\n<\/br><\/p>\n<p>Normalmente quando voc\u00ea executa uma aplica\u00e7\u00e3o no <strong>IIS Express<\/strong>, ela pode ser acessada pela URL <strong>http:\/\/localhost:[numero_da_porta]<\/strong>. Para permitir o acesso externo \u00e0 aplica\u00e7\u00f5es desenvolvidas no <strong>Visual Studio 2017<\/strong>,  abra o arquivo localizado em <strong>&lt;solution&gt;\/.vs\/config\/applicationhost.config<\/strong>, localize a tag <strong>&lt;sites&gt; &rarr; &lt;site&gt; &rarr; &lt;bindings&gt; &rarr; &lt;binding <\/strong>; e duplique a linha de <strong>\u201cbindingInformation\u201d<\/strong> contendo localhost adicionando um novo binding para o seu IP.  Ap\u00f3s as altera\u00e7\u00f5es seu arquivo deve ser similar ao trecho de c\u00f3digo abaixo.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n    &lt;sites&gt;\r\n      \r\n\t...\r\n\r\n      &lt;site name=&quot;RestfulAPIWithAspNet&quot; id=&quot;2&quot;&gt;\r\n        &lt;application path=&quot;\/&quot; applicationPool=&quot;Clr4IntegratedAppPool&quot;&gt;\r\n          &lt;virtualDirectory path=&quot;\/&quot; physicalPath=&quot;C:\\Dev\\Playground\\Code\\ASP_NET_Playground\\RestfulAPIWithAspNet-v10\\RestfulAPIWithAspNet&quot; \/&gt;\r\n        &lt;\/application&gt;\r\n        &lt;bindings&gt;\r\n          &lt;binding protocol=&quot;http&quot; bindingInformation=&quot;*:61533:localhost&quot; \/&gt; &lt;!-- Duplique essa linha e adicione um novo binding para o seu IP --&gt; \r\n          &lt;binding protocol=&quot;http&quot; bindingInformation=&quot;*:61533:192.168.2.2&quot; \/&gt; \r\n        &lt;\/bindings&gt;\r\n      &lt;\/site&gt;\r\n      \r\n\t...\r\n\r\n    &lt;\/sites&gt;\r\n<\/pre>\n<p>Devemos nos lembrar que n\u00e3o \u00e9 uma boa pr\u00e1tica versionar este arquivo.<br \/>\n<strong>2\u00b0 Passo : Permitir Incoming Connections<\/strong><br \/>\nSe voc\u00ea estiver executando em uma vers\u00e3o igual ou superior ao Windows 7, a maioria dos acessos externos s\u00e3o bloqueados por padr\u00e3o, ent\u00e3o voc\u00ea precisa dar permiss\u00e3o especificamente para as conex\u00f5es recebidas por sua aplica\u00e7\u00e3o. Para fazer isso siga os passos abaixo:<\/p>\n<p><\/br><br \/>\nAbra o <strong>PowerShell<\/strong> ou o prompt de comandos como <strong>\u201cAdministrador\u201d<\/strong>;<br \/>\nExecute o comando abaixo:<\/p>\n<p><\/br><\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nnetsh http add urlacl url=http:\/\/*:61533\/ user=everyone\r\n<\/pre>\n<p>Obs: Voc\u00ea deve trocar o n\u00famero da porta para o que a sua aplica\u00e7\u00e3o estiver usando. Al\u00e9m disso se voc\u00ea estiver instalado o <strong>Windows em portugu\u00eas<\/strong> precisar\u00e1 mudar o user de <strong>everyone<\/strong> para <strong>todos<\/strong>.<\/p>\n<p><\/br><\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nnetsh http add urlacl url=http:\/\/*:61533\/ user=todos\r\n<\/pre>\n<p><\/br><br \/>\nNesse passo possivelmente voc\u00ea j\u00e1 conseguiu desbloquear o acesso externo.<\/p>\n<p><\/br><br \/>\n<strong>3\u00b0 Passo : Configurar o Firewall<\/strong><br \/>\nSe voc\u00ea chegou at\u00e9 aqui as coisas n\u00e3o est\u00e3o muito boas, hehehe.<\/p>\n<p><\/br><\/p>\n<ul>\n<li>Acesse o \u201cPainel de Controle\u201d e v\u00e1 at\u00e9 \u201cFirewall do Windows\u201d<\/li>\n<li>Clique em \u201cConfigura\u00e7\u00f5es Avan\u00e7adas\u201d<\/li>\n<li>Selecione \u201cRegras de Entrada\u201d<\/li>\n<p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/ASP_NET_Playground\/master\/post\/01.PNG\" alt=\"Downloading Installer\" style=\"max-width:100%;\"><\/p>\n<li>Clique em \u201cNova Regra\u2026\u201d<\/li>\n<li>Selecione \u201cPorta\u201d e clique em \u201cAvan\u00e7ar\u201d<\/li>\n<p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/ASP_NET_Playground\/master\/post\/02.PNG\" alt=\"Downloading Installer\" style=\"max-width:100%;\"><\/p>\n<li>Defina a porta usada pelo  IIS Express para sua aplica\u00e7\u00e3o e, clique em  \u201cAvan\u00e7ar\u201d<\/li>\n<p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/ASP_NET_Playground\/master\/post\/03.PNG\" alt=\"Downloading Installer\" style=\"max-width:100%;\"><\/p>\n<li>Selecione \u201cPermitir a conex\u00e3o\u201d, clique em  \u201cAvan\u00e7ar\u201d<\/li>\n<p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/ASP_NET_Playground\/master\/post\/04.PNG\" alt=\"Downloading Installer\" style=\"max-width:100%;\"><\/p>\n<li>Verifique onde voc\u00ea gostaria de permitir a conex\u00e3o ao IIS Express (Dom\u00ednio, Particular, P\u00fablico), clique em  \u201cAvan\u00e7ar\u201d<\/li>\n<p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/ASP_NET_Playground\/master\/post\/05.PNG\" alt=\"Downloading Installer\" style=\"max-width:100%;\"><\/p>\n<li>Defina o nome de sua regra e clique em \u201cConcluir\u201d<\/li>\n<p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/ASP_NET_Playground\/master\/post\/06.PNG\" alt=\"Downloading Installer\" style=\"max-width:100%;\">\n<\/ul>\n<p>Pronto nossa nova regra foi criada.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/ASP_NET_Playground\/master\/post\/07.PNG\" alt=\"Downloading Installer\" style=\"max-width:100%;\"><\/p>\n<p><\/br><br \/>\nSe preferir adicionar a regra do firewall via linha de comando basta voc\u00ea adaptar o comando abaixo \u00e0s suas necessidades.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nnetsh advfirewall firewall add rule name=&quot;IISExpressWeb&quot; dir=in protocol=tcp localport=61533 profile=private remoteip=localsubnet action=allow\r\n<\/pre>\n<p><\/br><br \/>\nEsse comando adiciona uma nova regra ao Firewall do Windows, permitindo conex\u00f5es externas a porta 61533 para computadores da sua subrede.<br \/>\nNesse ponto, basta voc\u00ea pressionar Ctrl-F5 no Visual Studio, e acessar sua API ou site em outra m\u00e1quina! Para situa\u00e7\u00f5es avan\u00e7adas acesse o blog do Scott Hanselman.<\/p>\n<h2>Treinamentos relacionados com este post<\/h2>\n<p>\n    <a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_asp_net\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 Azure com ASP.NET Core 5 e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/01-rest-asp.png\" \/><br \/>\n    <\/a>\n<\/p>\n<p>\n    <a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices-dotnet\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Arquitetura de Microsservi\u00e7os do 0 com ASP.NET, .NET 6 e C#\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/15-microservices-dotnet.png\" \/><br \/>\n    <\/a>\n<\/p>\n<p>\n    <a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker do 0 \u00e0 Maestria: Cont\u00eaineres Desmistificados mais 3 B\u00d4NUS\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/09-docker.png\" \/><br \/>\n    <\/a>\n<\/p>\n<p>\n    <a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker_para_aws\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker para Amazon AWS Implante Apps Java e .NET com Travis CI\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/10-docker-to-aws.png\" \/><br \/>\n    <\/a>\n<\/p>\n<p>\n    <a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_react_asp_net\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"React JS consumindo REST API RESTful em ASP.NET Core .NET 6\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/17-rest-react-aspnet.png\" \/><br \/>\n    <\/a><\/p>\n<div align=\"right\"><div class=\"sharexyWidgetNoindexUniqueClassName\"><div id=\"shr_4035097\"><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Fala pessoal atualmente eu estou desenvolvendo aplica\u00e7\u00f5es REST em ASP.NET e tive que testar uma API desenvolvida em outra m\u00e1quina. Por padr\u00e3o, o IIS Express n\u00e3o permite conex\u00f5es remotas e retorna o seginte erro &#8220;Bad Request \u2013 Invalid Host Name&#8221;. Scott Hanselman fez um post muito bem detalhado a esse respeito. No meu caso eu [&#8230;]<\/p>\n<div align=\"right\">\n<div class=\"sharexyWidgetNoindexUniqueClassName\">\n<div id=\"shr_4035097\"><\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[249,247,250,248],"tags":[252,253,251,204],"_links":{"self":[{"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/posts\/1066"}],"collection":[{"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1066"}],"version-history":[{"count":13,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/posts\/1066\/revisions"}],"predecessor-version":[{"id":1252,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/posts\/1066\/revisions\/1252"}],"wp:attachment":[{"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1066"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1066"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1066"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}