11. december 2002 - 22:20Der er
8 kommentarer og 1 løsning
Langsom socket handler
Jeg er ved at lave en webapplikation, som skal kommunikere med en "gammeldags" webservice. Webservicen er lavet i cgi, og kører på en Solaris 5.7
Til det har jeg lavet en method der sender en function til en given ip-addresse, på en given port, for derefter at modtage en stream af bytes, og returnerer den som en string.
Mit problem er umiddelbart at ligegyldigt hvor mange bytes jeg modtager, tager det altid 5 sek.
Dem som har udviklet webservicen jeg kommunikere med, påstår at de har lavet en cgi applikation, som klare samme på 0,7 sek.
Derfor vil jeg hører om der er nogen der umiddelbart kan se hvorfor nedenstående method tager 5 sek. ???
public static string getSocket(string function) { string server = "XX.XXX.XX.XXX"; int port = XXXX; //Sets up variables and a string to write to the server Encoding ASCII = System.Text.ASCIIEncoding.GetEncoding(1252); Byte[] ByteGet = ASCII.GetBytes(function); Byte[] RecvBytes = new Byte[5120]; String strRetPage = null;
// IPAddress and IPEndPoint represent the endpoint that will // receive the request. // Get the first IPAddress in the list using DNS. IPAddress hostadd = Dns.Resolve(server).AddressList[0];
IPEndPoint EPhost = new IPEndPoint(hostadd, port);
//Creates the Socket for sending data over TCP. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
// Connects to the host using IPEndPoint. s.Connect(EPhost); if (!s.Connected) { strRetPage = "Unable to connect to host"; new ExceptionHandler(strRetPage); } else { // Sends the GET text to the host. s.Send(ByteGet, ByteGet.Length, SocketFlags.None);
// Receives the page, looping until all bytes are received Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0); strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
Hmmm... Jeg ved ikke om det har noget med dit problem at gøre, men linjen: new ExceptionHandler... skal erstattes med: throw new Exception(strRetPage);
Men, misbruger (find et andet nick, iøvrigt), kan du ikke splitte koden op sådan at du begynder med at afvikle kun første linje, dernæst 1.+2., så 1.+2.+3. osv., for at se, hvilken operation der sluger meget tid.
new ExceptionHandle(strRetPage) er min custom exception handler....
Tjo! Jeg kunne sagtens benytte stringbuilder, men at tror det giver den helt store forskel..... Hmmm!
Det som er mystisk er at det er ligegyldigt om jeg kun modtager en dato retur, eller 10 kb. data, det tager altid 5 sek.....
Mit problem er umiddelbart at den webapplikation jeg laver modtager alle de forskellige forms dataer fra denne service, nogle gange over et kald, men andre gange over 3 kald, og det er jo temlig useriøst hvis brugeren skal vente 15 sek.....!
Såfremt der er nogle der har nogle gode bud er jeg dog stadig interesseret, da jeg ikke har fået løst problemmet...?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.