Ich habe etwas Code geschrieben, um Text von einem Listener zu senden und zu lesen. Dies läuft am 1. und 2. Austausch, aber am 3. senden gibt es eine lange Verzögerung zwischen dem Aufruf von GetRequestStream und dem tatsächlichen Schreiben der Daten.HttpWebRequest getRequestStream hängt bei mehreren Läufen
Ich habe die outStream auf der Sendeseite angeordnet ist, sowie die Stromleser, und den Eingangsstrom auf der Leseseite wie hier empfohlen: Does anyone know why I receive an HttpWebRequest Timeout?
und es hängt immer noch auf dem dritten Versuch zu senden Info. Es scheint auf jeden Fall bei GetRequestStrean in nachrichts zu hängen:
public void sendMessage(string message)
{
HttpWebRequest request;
string sendUrl;
sendUrl = "http://" + termIPAddress + ":" + sendPort + "/";
Uri uri = new Uri(sendUrl);
Console.WriteLine("http://" + termIPAddress + ":" + sendPort + "/");
ServicePoint servicePoint = ServicePointManager.FindServicePoint(uri);
servicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
servicePoint.ConnectionLeaseTimeout = 300;
request = (HttpWebRequest)WebRequest.Create(sendUrl);
request.KeepAlive = false;
request.Method = "POST";
request.ProtocolVersion = HttpVersion.Version11;
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("SourceIP", localIPAddress);
request.Headers.Add("MachineName", localName);
requestStarted = true;
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(message);
request.ContentLength = buffer.Length;
try
{
using (Stream output = request.GetRequestStream())
{
output.Write(buffer, 0, buffer.Length);
output.Close();
request = null;
}
}
catch(WebException wE)
{
Console.WriteLine(wE.Message);
}
}
Und dies ist der Leseteil:
public string getMessage()
{
Console.WriteLine("Entering actual listener");
string s;
string sourceIP;
NameValueCollection headerList;
HttpListenerContext context = terminalListener.GetContext();
HttpListenerRequest request = context.Request;
headerList = request.Headers;
sourceIP = headerList.GetValues("SourceIP")[0];
termName = headerList.GetValues("MachineName")[0];
termIPAddress = sourceIP;
using (System.IO.Stream body = request.InputStream)
{
System.Text.Encoding encoding = request.ContentEncoding;
using (System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding))
{
s = reader.ReadToEnd();
body.Close();
reader.Close();
}
}
return termName + " : " + s;
}
Ich habe auch versucht, eine IP-End Point binden hinzuzufügen, aber ehrlich sein müssen, ich don verstehe dieses Teil des Codes nicht vollständig:
private IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
{
int portNumber = Convert.ToInt32(sendPort);
IPEndPoint IEP = new IPEndPoint(IPAddress.Parse(localIPAddress), 0);
Console.WriteLine(Convert.ToString(IEP));
return IEP;
}
Jede Hilfe sehr geschätzt.
Großartig. Behoben. Danke vielmals. – user1731572
Sie sollten auch .Dispose() die Antwort, wir hatten ähnlichen Code und nicht die Beseitigung der Antwort verursacht hängt auf der gleichen Methode. –