我正在编写一个MVC应用程序,它需要从ARIN.net请求ip地址的所有者名称。以下是我为此编写的程序代码片段:
.
.
.
string requestUrl = "http://whois.arin.net/rest/ip/17.151.229.4";
WebResponse response = null;
WebRequest request = WebRequest.Create(requestUrl);
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
XElement responseElmn = XElement.Parse(sr.ReadToEnd());
.
.
.
这段代码成功地向http://whois.arin.net/rest/ip/17.151.229.4发送请求,并在从我的计算机上的控制台应用程序运行时收到相应的响应。但是,当我尝试将这段代码放在我的MVC应用程序中时,我得到了一个异常陈述
连接尝试失败,因为连接方没有 在一段时间后正确回应,或建立连接 失败,因为连接的主机无法响应。
这些应用程序运行的本地计算机位于一个非常大的公司的网络中,因此当前面提到的运行时,此代码段必须通过代理服务器将其请求发送到 ARIN 应用。我相信由于控制台应用程序在与MVC应用程序不同的用户下运行,我可能会在结果中收到这种差异。我在Visual Studio 2013中以调试模式运行这两个应用程序。当它以调试模式运行时,MVC应用程序由IIS Express托管。
我的问题是:
如何找出运行控制台应用程序和MVC应用程序的用户?
如何配置IIS Express以在其他用户下运行MVC应用程序?
我无法在我的研究中找到问题的答案,感谢任何帮助。
答案 0 :(得分:0)
我发现了问题的原因。默认情况下,MVC应用程序没有为WebRequest实例的代理对象成员分配代理服务器,而控制台应用程序中的代理服务器则没有。
因此,在尝试检索响应之前,我必须将代理服务器分配给代码中WebRequest实例的代理对象实例:
string requestUrl = "http://whois.arin.net/rest/ip/17.151.229.4";
WebResponse response = null;
WebRequest request = WebRequest.Create(requestUrl);
Uri newUri = new Uri("http://proxy.bigcorp.com:8080");
WebProxy myProxy = new WebProxy(newUri);
request.Proxy = myProxy;
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
XElement responseElmn = XElement.Parse(sr.ReadToEnd());
感谢Brendan Green的帮助!