I en klass skapar jag fyra trådar, i varje tråd skapas en HttpWebRequest med en HttpWebResponse. Går alla anropen till samma webserver? Det kan inte vara någon begränsning på servern som inte tillåter fler anrop från samma ip-adress? Ja, alla anropen går till samma server men jag tror inte att det är problemet. Kan det vara så att du inte får ha mer en response pga. annars vet han inte vilken request han får. Annars finns ju risk att en GetResponse fångar upp anrop från en anna server. Då kan det ju lätt bli lite tokigt. Använder du något trådsynkroniseringsmojs, typ lock eller liknande? Har du lite kod att visa? Joakim, anropen borde ju begäras från olika portar. På swå sätt kan anropen särskiljas. Jag loopar bara 4 gånger till DownloadFile. Just de... Är det bara en eller två trådar som körs? Ms hade nämligen i första versionerna av ramverket följt specifikationen för http väldigt noga, och bara tillät två samtidia anslutningar mot samma server. Vet att man var tvungen att åsidosätta det i config för att det skulle fungera. Undrar om inte det är problemet Jag kör 4 trådar men jag använder VS2005 så det ska nog inte vara problemet Har du testat att ansluta till 4 olika servrar för att se om det blir någon skillnad? Testade nu att ansluta till olika servrar och då körde de samtidigt så problemet är att ansluta till samma server flera gånger. Fråga: Ett annat nedladdningsprogram, fungerar det att köra flera mot samma server? Ja, testade samma fil med 4 trådar i GetRight, alla mot samma server och det funkar Tack, tack, tack, om du visste hur jag har slitit mitt hår för den raden...Trådad HttpWebResponse
Jag vill att dessa fyra trådar ska köras samtidigt men av någon anledning blockeras dom av varandra så att bara en körs samtidigt.
Alla fyra trådarna startas men bara en körs åt gången tills den är färdig, då nästa startar.
Trådarna sätts i vänteläge när jag kommer till GetResponse på requesten.
Någon som vet varför det är så?Sv: Trådad HttpWebResponse
/JohanSv:Trådad HttpWebResponse
Jag har testat med många olika servrar för att utesluta detta.
Jag tror att det är något med GetResponse som sätter de andra trådarna i vänteläge.Sv: Trådad HttpWebResponse
En anna anleding kan ju vara den att man inte skall kunna "flooda" webservrar med massa request.
Det är bara gissningar.Sv: Trådad HttpWebResponse
Sv:Trådad HttpWebResponse
Sv:Trådad HttpWebResponse
Koden ser ut så här:
public void DownloadFile(string outPath)
{
outFile = outPath;
// Create a new thread that calls the StartDownload() method
thrDownload = new Thread(StartDownload);
log("Start DownloadFile-Thread");
// Start the thread, and thus call StartDownload()
thrDownload.Start();
}
private void StartDownload()
{
try
{
// Create a request to the file we are downloading
webRequest = (HttpWebRequest)WebRequest.Create(dowloadUrl);
// Set the proxy to use if any
if (!dowloadProxy.Equals(string.Empty))
webRequest.Proxy = new WebProxy(dowloadProxy);
log("Do the webrequest");
if(endOffset>0)
webRequest.AddRange(startOffset, endOffset);
else
webRequest.AddRange(startOffset);
log("End the webrequest");
// Set default authentication for retrieving the file
webRequest.Credentials = CredentialCache.DefaultCredentials;
log("Retrieve the response from the server");
// Retrieve the response from the server
webResponse = (HttpWebResponse)webRequest.GetResponse();
log("After Retrieve the response from the server");
//Ask the server for the file size and store it
fileSize = webResponse.ContentLength;
log("Get the response-stream");
// Get the response-stream
strResponse = webResponse.GetResponseStream();
log("After Get the response-stream");
// Set the output-stream
strLocal = new FileStream(outFile, FileMode.Create, FileAccess.Write, FileShare.Write);
// It will store the current number of bytes we retrieved from the server
int bytesSize;
// A buffer for storing and writing the data retrieved from the server
//byte[] downBuffer = new byte[2048];
byte[] downBuffer = new byte[131072];
// Set the start-time
downStart = DateTime.Now;
log("Start while-loop");
// Loop through the buffer until the buffer is empty
while ((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0)
{
// Write the data from the buffer to the local hard drive
strLocal.Write(downBuffer, 0, bytesSize);
//CalculateDownloadingInfo();
}
log("End while-loop");
}
catch (Exception e)
{
lastError = e;
RaiseDownloadError(e);
}
finally
{
if (strResponse != null) strResponse.Close();
if (strLocal != null) strLocal.Close();
}
}
Sv: Trådad HttpWebResponse
Sv:Trådad HttpWebResponse
Sv: Trådad HttpWebResponse
/JohanSv:Trådad HttpWebResponse
Det jag försöker göra är att ladda ner en fil i flera segment som tex GetRight så jag behöver ansluta till samma server.Sv: Trådad HttpWebResponse
Sv:Trådad HttpWebResponse
Sv:Trådad HttpWebResponse
Nu funkar det.