IIS随机错误请求 - 主机名

时间:2016-04-29 01:17:39

标签: c# php .net iis dns

我正在使用C#调用一个简单的iis,php,json api。我通过IP调用它,并手动传递主机头,如下所示

var webhost = "api.srv.com";
var webhostip = <get ip from my own dns cache>;
var client = new WebClient();
client.Headers.Add( "Host", webhost );
response = client.DownlodData("https://" + webhostip + "/etcetc.php");

我正在使用我在应用程序中内置的更可靠的dns缓存。我希望不要受到糟糕的DNS服务器/配置的支配。

这很有效。 99%的时间(请求非常频繁地运行)。随便,我会得到400个不好的请求。 logfiles \ HTTPERR显示“ - 主机名 - ”

的原因

client.DownloadData使用标准的fqdn URL并且没有自定义标头可靠地工作(DNS失败时除外)

为了比较两种类型的请求,我将客户端指向/phpinfo.php

没有差异。

这种方法如何在99%的时间内起作用,但随机失败?

编辑:“DNS缓存”始终返回IP,我确信这一点。

更新:我改进了日志记录,当时是响应并请求数据

Reuqest:https://1.2.3.4/apidir/script.php?p1=xxxx&p2=xx%20xxx

标题:'Host': 'api.srv.com:445'

响应,来自WebException.Response.GetResponseStream

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>

此请求每分钟都在运行,并且只是偶然失败!

请求所用的时间通常为60-90秒。 WebClient上的超时为100秒。在使用普通的fqdn方法时,我确实得到了超时,但它们永远不会出现为400。

更新:我启用了loggin以在问题发生时捕获完整的跟踪。

经过其中几次(由于我国的精彩互联网):

System.Net Error: 0 : [2776] Exception in HttpWebRequest#50710248::GetResponse - Unable to connect to the remote server.
   at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6)
   at System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback)
   at System.Net.Connection.CompleteStartConnection(Boolean async, HttpWebRequest httpWebRequest)

我让连接池尝试重新建立连接(由Keep-Alive显示),但它未能使用我指定的标头。

System.Net Information: 0 : [2776] ConnectStream#5673090 - Sending headers

Host: 1.2.3.4:445
Connection: Keep-Alive

我怀疑是.Net WebClient错误。

1 个答案:

答案 0 :(得分:0)

我没有理解我实际上在轻微通信失败(ConnectFailure,Timeout等)的情况下调用DownloadData 4重试次数。

client.Headers被消耗,必须重新添加。

我希望这篇文章可以帮助将来的某个人。