tutorial - web api rest c#
Acceso al emulador Azure desde otro dispositivo (5)
Como ya está usando IIS
(regular) y afirma que funciona, puede usar Server Farming
como un tipo de Reverse Proxy
+ Load Balancer
para lograr su objetivo:
Ejecute su proyecto WebRole y guarde las Urls internas (como aparece en la imagen
127.255.0.2:82
).Abra el
IIS Manager
>Server Farms
>Create Server Farm
.Elija un nombre y haga clic en
Next
. en el siguiente panel (''Agregar servidor'') agrega todas las URL que reuniste en el paso 1 yFinish
.Haga clic en
Yes
cuando se le pregunte si desea crear lasRewrite Rules
adecuadas para esta Granja.En la lista
Server Farms
, haga clic en su nueva Granja y elijaProxy
en los iconos de la derecha, marque la casillaReverse rewrite host in response headers
.Ahora puede usar su dirección de enlace de IIS normal para acceder a las instancias de
Emulator
(una vez que se ejecuta).
PD: si desea revertir estos cambios, elimine la Granja. luego haga clic en el nombre de su computadora / servidor (elemento raíz) en el árbol izquierdo, elija Url Rewrite
a la derecha y elimine las reglas ARR
.
Tengo dos proyectos diferentes:
- Aplicación Windows Phone 8, que estoy ejecutando en un dispositivo real de desarrollo físico.
- El servicio Azure Cloud, que contiene un punto final WebRole simple que contiene un ASP.NET MVC WebAPI.
Mi objetivo es simple:
Utilice la aplicación WP8 que se ejecuta desde un dispositivo real para acceder (usando HTTPClient) al controlador WebAPI mientras está implementado en Azure Emulator.
¿Qué es el trabajo?
- La aplicación puede comunicarse con éxito con WebApi cuando se implementa en Azure Cloud.
- La aplicación puede comunicarse con éxito con WebApi cuando está alojada localmente en
IIS Express
(sin Azure), y las configuraciones deIIS Express
se modifican siguiendo este artículo.
Por lo que yo entiendo, el problema es que Azure Emulator está configurado para escuchar en la dirección IP 127.0.0.1, que no es accesible desde fuera del dominio localhost.
Encontré esta publicación que ofrece una solución a este problema exacto, pero intentar seguirla genera una Excepción desconocida al intentar implementar en Azure Emulator.
¿Es realmente imposible probar localmente la aplicación WP8 que se comunica con Azure Cloud Service?
He encontrado la manera, gracias a esta gran publicación aquí.
Aparentemente, al redirigir el tráfico enviado a mi dirección IP local (por ejemplo, 192.168.0.1) a 127.0.0.1, ahora puedo usar Windows Phone 8 Emulator contra las instancias de Azure Cloud Emulator.
La forma en que hice el enrutamiento es mediante el uso de una aplicación simple llamada PassPort , pero supongo que hay muchas alternativas.
Descubrí cómo es posible tener un emulador de teléfono o un dispositivo físico Windows Phone conectado que se comunique con Azure Emulator.
Para otros desarrolladores que luchan con el mismo requisito, estos son los pasos necesarios para que funcione:
Suposiciones
- Usted conoce la dirección IP de la máquina de alojamiento.
- Ningún cortafuegos está bloqueando el acceso
- Cierre los emuladores IIS y Azure y reinícielos después de los cambios de configuración
Emulador de cálculo de Azure:
- Abra
"C:/Program Files/Microsoft SDKs/Windows Azure/Emulator/devfabric/DevFC.exe.config"
para editar. - Establezca
"VipPoolStartIPAddress"
y"VipPoolEndIPAddress"
en la IP de su máquina de host (por ejemplo, 192.168.1.100)
Azure Storage Emulator:
- Abra
"C:/Program Files/Microsoft SDKs/Windows Azure/Emulator/devstore/DSServiceLDB.exe.config"
y"C:/Program Files/Microsoft SDKs/Windows Azure/Emulator/devstore/DSServiceSQL.exe.config"
para edición. - Establezca la sección de
services
en ambos archivos para usar IP de alojamiento. - Configure la cadena de conexión de almacenamiento en la configuración "Rol" (en lugar de la configuración predeterminada del
Windows Azure storage emulator
):- Haga clic derecho en el
Role
(en la carpeta "Roles" en el explorador de soluciones) para ingresar a su página deProperties
. Haga clic en la pestañaSettings
. Asegúrese de editar la configuraciónLocal
(selecciónela en el cuadro de selecciónService Configuration
). - Edite la cadena de conexión para el almacenamiento
- Ingrese manualmente las credenciales
- El nombre de cuenta y la clave de cuenta están escritos en la sección de
accounts
enDSServiceSQL.exe.config
- Especifique puntos finales personalizados con su IP de alojamiento.
- Haga clic derecho en el
¡Disfrutar!
No necesita ninguna aplicación externa para hacer esto. Pruebe el reenvío de puertos usando lo siguiente:
Ejecute su aplicación en el emulador de Azure y luego descubra su IP y Puerto haciendo clic derecho en el ícono de IIS Express en la bandeja del sistema (digamos 127.0.0.1:81)
Ahora elija un puerto para escuchar (digamos 8088) y reenvíe sus solicitudes entrantes a su aplicación simplemente ejecutando el siguiente comando en un símbolo del sistema elevado:
netsh interface portproxy add v4tov4 listenport=8088 connectaddress=127.0.0.1 connectport=81 protocol=tcp
Si el firewall se está ejecutando y su puerto elegido está bloqueado, abra el puerto (8088 en este ejemplo) agregando una regla de entrada al Firewall de Windows.
Ahora navegue usando su computadora IP, como 192.168.0.100:8088, y ahora debería poder acceder a su aplicación. Y esto se puede utilizar a través de su aplicación WP o Cordova (móvil) para realizar pruebas localmente. Espero que esto ayude.
(Si desea eliminar el reenvío de puertos, simplemente use el interruptor de eliminación del comando netsh interface portproxy ).
Sé que esto ya ha sido respondido, pero aún no se ha publicado una solución simple a este problema. Esto es lo que hice para que mi Mac hablara con Azure Storage Emulator (v4.3) ejecutándose en mi PC a través de mi LAN.
Estoy ejecutando Windows 10 Versión 1511 con v4.3 del Azure Storage Emulator al momento de escribir.
- Asegúrese de que Azure Storage Emulator está desactivado. Puede hacerlo abriendo el símbolo del sistema de Azure Storage Emulator. Puede encontrarlo escribiendo
Azure Storage Emulator
en el menú Inicio. Una vez abierto, escribaAzureStorageEmulator stop
. - Tome la dirección IP de la computadora que ejecuta Azure Storage Emulator. Escriba
ipconfig
en el símbolo del sistema que ya tiene abierto. Encuentra la dirección IPV4: debería ser algo así como192.168.1.xxx
- Abra el archivo ubicado en
C:/Program Files (x86)/Microsoft SDKs/Azure/Storage Emulator/AzureStorageEmulator.exe.config
- En la sección
StorageEmulatorConfig
, edite cada servicio para que se vea a continuación. Obviamente, reemplace "xxx.xxx.xxx.xxx" con su dirección IP real ... ¡pero mantenga los puertos iguales! - Luego, dirígete a la configuración de tu firewall. Tendremos que permitir las conexiones entrantes a la dirección IP de su computadora a estos tres puertos enumerados anteriormente en la sección
StorageEmulatorConfig
. En Panel de control -> Sistema y seguridad -> Firewall de Windows -> Configuración avanzada -> Reglas de entrada, haga clic enNew Rule...
en el lado derecho de la pantalla. Se ejecutará un asistente para configurar una nueva regla. Voy a resumir qué hacer a continuación:
Tipo de regla : Seleccione
Custom
Programa : Seleccione
Customize...
luegoApply to services only
Protocolo y puertos : establezca el
Protocol type
deTCP
enTCP
y establezca elRemote port
enSpecific Ports
y en el cuadro de entrada ingrese10000-10002
. Eso agregará el rango de puertos especificados en la secciónStorageEmulatorConfig
a esta regla y, a su vez, permitirá las conexiones entrantes a través de esos puertos.Alcance : saltee esta sección, haga que se aplique a todas las direcciones IP por simplicidad
Acción : Permitir la conexión
Perfil : según el perfil de conexión en el que se esté ejecutando, debe seleccionar el apropiado. En mi caso, mi computadora estaba conectada a la LAN en mi casa, por lo que estaba conectado a una red privada . No deseleccioné
Domain
yPublic
. Yo recomendaría hacer lo mismo.Nombre : Azure Storage Emulator
¡Finaliza el golpe y listo! ... con esa parte ...
Abra un indicador de comando elevado del Administrador e ingrese los siguientes comandos (Nota: reemplace el xxx.xxx.xxx.xxx con su dirección IP !!!):
netsh http add urlacl url=http://xxx.xxx.xxx.xxx:10000/ user=everyone
netsh http add urlacl url=http://xxx.xxx.xxx.xxx:10001/ user=everyone
netsh http add urlacl url=http://xxx.xxx.xxx.xxx:10002/ user=everyone
Abra un navegador en el dispositivo donde intenta conectarse a Azure Storage Emulator e intente acceder a las siguientes URL:
http://xxx.xxx.xxx.xxx:10002/
http://xxx.xxx.xxx.xxx:10002/
http://xxx.xxx.xxx.xxx:10002/
Si recibes una respuesta, esto es algo como esto:
InvalidUriEl URI solicitado no representa ningún recurso en el servidor.
entonces eres oro ... Si no, publica un comentario y actualizaré mi respuesta.
Es importante tener en cuenta que debe actualizar la cadena de conexión en el archivo .config del proyecto donde está generando las URL para acceder a sus imágenes (suponiendo que eso es lo que está haciendo). ¡USTED NO PUEDE UTILIZAR MÁS EL ACUERDO DE STRING DE CONEXIÓN DE DESARROLLO! Debe actualizarse a: (reemplace xxx.xxx.xxx.xxx con la dirección IP de arriba:
DefaultEndpointsProtocol = http; AccountName = devstoreaccount1; AccountKey = Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq / K1SZFPTOtr / KBHBeksoGMGw ==; BlobEndpoint = http://xxx.xxx.xxx.xxx:10000/devstoreaccount1;TableEndpoint=http://xxx.xxx.xxx.xxx: 10002 / devstoreaccount1; QueueEndpoint = http: //xxx.xxx.xxx.xxx: 10001 / devstoreaccount1 ;
Si tiene esto en su sección AppSettings y lo formatea muy bien con / n, romperá la cadena y el componente de almacenamiento no lo reconocerá como una cadena de conexión válida. Así que mantenlo una cadena larga e irritante.