2010-11-12 8 views
6

estoy siguiendo un tutorial sobre este enlace http://www.codeproject.com/KB/aspnet/ASPNETService.aspxCómo utilizar WebClient.DownloadData (a un DummyPage.aspx local)

Ahora estoy atascado en estos códigos

private const string DummyPageUrl = 
    "http://localhost/TestCacheTimeout/WebForm1.aspx"; 

private void HitPage() 
{ 
    WebClient client = new WebClient(); 
    client.DownloadData(DummyPageUrl); 
} 

Mi dirección de aplicación local tiene un número de puerto después de "localhost", entonces ¿cómo puedo obtener la ruta completa (¿se puede hacer en el método Application_Start)? Quiero que sea muy genérico para que pueda funcionar en cualquier caso.

¡Muchas gracias!

ACTUALIZACIÓN

yo probamos este en el Application_Start y funciona muy bien, pero el error volver de inmediato cuando se publique a IIS7

String path = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/"); 

Respuesta

3

Si está llamando de nuevo al mismo servidor, tal vez utilizar el Request objeto:

var url = new Uri(Request.Url, "/TestCacheTimeout/WebForm1.aspx").AbsoluteUri; 

de lo contrario, almacenar los otros detalles del servidor en una configuración archivo o la base de datos, y simplemente dale el valor correcto.

Pero una mejor pregunta sería: ¿por qué hablaste a través de http a ti mismo? ¿Por qué no simplemente llamar a un método de clase? Personalmente, utilizaría un external trabajo programado para hacer esto.

+1

Todo lo que trato de hacer es seguir las instrucciones de ese sitio para simular un servicio que puede seguir funcionando y haciendo algunas cosas para mí con el tiempo. – Leo

+0

si tiene la aplicación web ejecutándose en un directorio virtual, puede/debe usar 'var url = Request.Url.ToString(). Substring (0, Request.Url.ToString(). LastIndexOf ('/')) +" /WebForm1.aspx ";' –

+0

Hay un problema con esto si implementa en un entorno en el que utiliza una carpeta de aplicaciones .... – MiloTheGreat

0

Sospecho que está utilizando el servidor de desarrollo ASP.NET que está incorporado en Visual Studio, que tiene una tendencia a cambiar los números de puerto de manera predeterminada. Si ese es el caso, entonces puede intentar simplemente configurar el servidor de desarrollo para que siempre use el mismo puerto, as described here. Entonces sólo tiene que añadir el número de puerto a su URL, así:

private const string DummyPageUrl = 
"http://localhost:42001/TestCacheTimeout/WebForm1.aspx"; 
0

Es necesario una respuesta que funciona cuando se despliegue a un entorno diferente que a lo mejor tiene una carpeta de aplicaciones virtuales.

// r is Request.Url 
var url = new Uri(r, System.Web.VirtualPathUtility.ToAbsolute("~/Folder/folder/page.aspx")).AbsoluteUri; 

Esto funcionará en todos los casos y no habrá sorpresas desagradables cuando se implemente.

Cuestiones relacionadas