Toon posts:

[.NET] Webservice contacten timeout

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ben een webservice aan het ontwikkelen en om het mogelijk te maken om grote hoeveelheden data te zenden naar deze webservice (wordt een behoorlijke DataSet naar verzonden) moet ik in de machine.config een regel aanpassen:

<httpRuntime
executionTimeout="90"
/>

De timeout van je aspx pagina in seconden, wil hem op bijv. 1000 zetten.
Alleen dit geld direct voor je hele webserver, das weer minder fijn. Nu heb ik de executionTimeout op 90 laten staan en in de aspx pagina die de webservice aanroept, de Server.ScriptTimeout = 1000 geplaatst. Alleen dit heeft geen effect.

Nu vraag ik me zowiezo af of hier een betere methode voor is en of iemand een oplossing weet waardoor ik de timeout niet direct 'server wide' hoeft te verhogen maar wel kan verhogen op de pagina die de webservice aanroept.

Thnx.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Als ik het goed begrijp, dan duurt het lang eer die webmethod returned, aangezien er een grote hoeveelheid data moet verwerkt worden?
Kijk dan eens naar de asynchrone methods van je WebService. (Beginxxxx en Endxxxxx). Daarmee kan je dus je webmethod asynchroon aanroepen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Nou ik stuur vanaf een aspx pagina een DataSet die +/- 25.000 rows kan bevatten. Het kost veel tijd voordat deze DataSet over de lijn is, de aspx pagina geeft hiervoor een timeout.

Nu is het ook zo dat de aspx middels een try{} catch{} constructie de webservice probeerd aan te roepen en indien dit niet lukt, de Thread 5 minuten laat wachten en het vervolgens opnieuw probeerd. Na 5 keer besluiten we dat de webservice definitief niet te bereiken is en wordt er een e-mail gestuurd naar de admin van het systeem. De timeout van de aspx treed nu al op voordat deze connect naar webserice/send mail naar admin routine klaar is.
Dit is niet op te lossen middels asynchrone methods neem ik aan?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Ben je dan wel zeker dat het nodig is om alle 25.000 records te verkrijgen?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 10 maart 2004 @ 16:10:
Ben je dan wel zeker dat het nodig is om alle 25.000 records te verkrijgen?
Zeker, dat is het hele idee van deze webservice :)
We moeten die info van de webserver naar het bedrijfsnetwerk krijgen. De webservice draait op het bedrijfsnetwerk en ontvangt de info van de webserver.

Zat ook eerst te denken om Remoting te gebruiken ivm minder overhead maar het probleem zou hiermee het zelfde zijn. Gezien de 'is webservice beschikbaar' controle.

[ Voor 18% gewijzigd door Verwijderd op 10-03-2004 16:14 . Reden: remoting uitleg.. ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je kan ook een 'kleine' method maken in je webservice die je enkel gebruikt om te kijken of de webservice beschikbaar is of niet.
Gewoon een method die enkel true oid returned en die je aanroept om te checken of de webservice beschikbaar is.

Maareh, van 25.000 records over te hevelen, daar wordt je niet blij van....

https://fgheysels.github.io/


Verwijderd

Topicstarter
'kleine' method is een goed idee maar helpt niet wat betreft timeout. Wat hij doet:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    bool bolOrderIsSend = false; //is the cardorder send
    long lngNumberOfTimesTriedToSend = 0; //the number of times we tried to send the carddetails without succes

    //send the cardorder to the webservice, try to atleast for 5 times, throw error if still no sucess after 5 times.
    while (bolOrderIsSend != true && lngNumberOfTimesTriedToSend < 5) {
        if (TryToSendOrderToWebservice(lngCardOrder_ID, objDbConn)) {
            bolOrderIsSend = true;
            break;
        } else {
            lngNumberOfTimesTriedToSend += 1;

            //wait for 2 minutes before trying to send to order again.
            Thread.Sleep(120000);
        }
    }

    //check if the order is send or if the send failed.
    if (bolOrderIsSend == true) {
        //order is send!
        return true;
    } else {
        //send failed, give the admin a e-mail containing the error
        SendErrrorMailToAdmin(lngCardOrder_ID);
        return false;
    }


Wat is naar jou idee een goede methode om deze grote hoeveelheid data over te sturen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Tja, ze niet oversturen. Ik begrijp nog steeds niet waarom het nodig is om 25k records over te zenden.

Wat doe je daarmee ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Op internet worden van allerlei leden bijgehouden, deze moeten geexporteerd worden om vervolgens een kaart (zoals je videoland pas, anwb pas enz) van te laten printen. Door de webservice die deze kaarthouders/leden ontvangt wordt hier een formaat van gemaakt wat direct naar de printers gestuurd kan worden.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Waarom stuur je dan niet alleen de wijzigingen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Dat kunnen er ook 10.000 er zijn, bijvoorbeeld 10.000 nieuw geimporteerde leden.
Maar je weet niet of er ook een mogelijkheid is om de timeout op pagina niveau in te stellen op een wijze dat het de machine.config override?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
De time-out in je web-config override je settings van je machine-config en is enkel geldig voor de web-applicatie waartoe die web.config behoort.
Iedere directory in je web app kan een web.config bevatten, en die web.config is dan geldig voor alle aspx pagina's in die directory.
Daarnaast kan je in een webconfig ook nog een sectie opnemen die bepaalde settings voor één bepaalde page specifieert.

edit:
in je machine.config zitten pielen, dat wil je niet, aangezien deze settings system-wide zijn, tenzij je ze overrided mbhv aparte web.configs.

[ Voor 64% gewijzigd door whoami op 10-03-2004 16:42 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Stom van me, de web.config gebruik ik al voor bepaalde error settings en applicatie variabelen. Hier kan je ook een:

code:
1
2
3
4
5
6
7
8
9
        <httpRuntime 
            executionTimeout="5400"
            maxRequestLength="102400"
            useFullyQualifiedRedirectUrl="false"
            minFreeThreads="8"
            minLocalRequestFreeThreads="4"
            appRequestQueueLimit="100"
            enableVersionHeader="true"
        />


sectie in opnemen?

--
Ja bovenstaande werkt prima..

[ Voor 14% gewijzigd door Verwijderd op 10-03-2004 16:49 . Reden: ja kan dus ]

Pagina: 1