【发布时间】:2013-04-11 12:25:38
【问题描述】:
我正在使用这段代码来实现 Http Server:
public Server()
{
_httpListener = new HttpListener();
_httpListener.Prefixes.Add(Server.UriAddress);
StartServer();
}
public void StartServer()
{
_httpListener.Start();
while (_httpListener.IsListening)
ProcessRequest();
}
void ProcessRequest()
{
var result = _httpListener.BeginGetContext(ListenerCallback, _httpListener);
result.AsyncWaitHandle.WaitOne();
}
void ListenerCallback(IAsyncResult result)
{
HttpListenerContext context = _httpListener.EndGetContext(result);
HttpListenerRequest request = context.Request;
string url = request.RawUrl;
url = url.Substring(1, url.Length - 1);
HttpListenerResponse response = context.Response;
string responseString = url;
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentLength64 = buffer.Length;
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
}
我有一个问题,如果我在浏览器中写了这个(这是一个例子,每次调用都会发生):
http://localhost:8888/Hello%20World
ListenerCallback 方法被调用了两次,知道如何解决吗?
【问题讨论】:
-
你的代码很好(我在我的电脑上运行它)。要么您不使用此代码,要么您的客户端发出多个请求。
-
chrome和IE发出2次请求,Firefox发出1次请求正常吗?
-
MTA,我用 IE 和 chrome 测试过,都发出 1 个请求。
-
将 Fiddler 放在两者之间以查看正在发出的请求。插件是否正在运行,是否正在请求网站图标?