Toon posts:

[ASP/XML]Grote bestanden geven een timeout

Pagina: 1
Acties:
  • 117 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een asp pagina dat een xml document van een andere server laad:

code:
1
2
3
4
5
6
dim xmldoc
Set xmlDoc = Server.CreateObject("MSXML2.DOMDocument")
xmlDoc.setProperty "ServerHTTPRequest", true 
xmlDoc.async = false
xmlDoc.load("http://www.notmyserver.com/test.xml")
'hier wat lezen en schrijven etc..


dit werkt prima, totdat het bestand te groot wordt en ik kan nergens iets vinden hoe ik kan zorgen dat asp langer wacht op het laden hiervan...

Iemand een idee?

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
ff de MSXML 3.0 SDK Downloaden... daar staat het in...

(iets met .setTimeOuts)

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
setTimeouts Method
Specifies timeout settings for resolving the domain name, establishing the connection to the server, sending the data, and receiving the response. The timeout parameters of the setTimeouts method are specified in milliseconds, so a value of 1000 would represent 1 second. A value of zero represents an infinite timeout. There are four separate timeout parameters: resolveTimeout, connectTimeout, sendTimeout, and receiveTimeout. When calling the setTimeouts method, all four values must be specified. The timeouts are applied at the Winsock

Script Syntax
oServerXMLHTTPRequest.setTimeouts(resolveTimeout, connectTimeout,
sendTimeout, receiveTimeout);

Parameters

resolveTimeout
A long integer. The value is applied to mapping host names (such as "www.microsoft.com") to IP addresses.

connectTimeout
A long integer. The value is applied to establishing a communication socket with the target server.

sendTimeout
A long integer. The value applies to sending an individual packet of request data (if any) on the communication socket to the target server. A large request sent to a server will normally be broken up into multiple packets; the send timeout applies to sending each packet individually.

receiveTimeout
A long integer. The value applies to receiving a packet of response data from the target server. Large responses will be broken up into multiple packets; the receive timeout applies to fetching each packet of data off the socket.

Example
var xmlServerHttp = new ActiveXObject("Msxml2.ServerXMLHTTP.4.0");
var lResolve = 5 * 1000;
var lConnect = 5 * 1000;
var lSend = 15 * 1000;
var lReceive = 15 * 1000;
xmlServerHttp.setTimeouts(lResolve, lConnect, lSend, lReceive);
xmlServerHttp.open("GET", "http://localhost/sample.xml", false);
xmlServerHttp.send();
;)

[ Voor 60% gewijzigd door RobIII op 31-08-2004 16:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • deviltje
  • Registratie: Juli 2000
  • Niet online
misschien is het wel de timeout van asp.. misschien moet je de ScriptTimeout iets hoger zetten

Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
deviltje schreef op 31 augustus 2004 @ 16:05:
misschien is het wel de timeout van asp.. misschien moet je de ScriptTimeout iets hoger zetten
<% Server.ScriptTimeout = 3600 %> :Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
server.scripttimeout is het niet, das van asp en is geen probleem

het andere voorbeeld uit de SDK; ik gebruik VBscript en volgens mij is dit een VB(net?) voorbeeld, ik krijg het wel aangepast maar loop echt vast op:

code:
1
Object doesn't support this property or method: 'setTimeouts'


in het sdk voorbeeld wordt ook een activeX component gebruikt, en dat is volgens mij niet hetzelfde als wat ik gebruik (of wel?)

ik zoek verder...

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Ik denk dat je het verkeerde object aan het gebruiken bent... Je moet niet MSXML2.Document gebruiken maar Msxml2.ServerXMLHTTP.4.0...

Zie de SDK voor meer info icm XML


Daarnaast is kun je bij deze SDK stellen dat vbscript = vb (zolang je maar let op je functie gebruik en manier van declareren)

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Verwijderd

Ik denk dat de timeout verhogen sowieso geen aanvaardbare oplossing is. Als je pagina al niet geladen kan worden binnen een normale tijd dan ben ik allang weggesurft.
Denk eens wat na over asynchrone verwerking en behandel dat grote xml bestand in een situatie waar verwerkingstijd niet uitmaakt. Ik bedoel is het echt nodig dat je dat document realtime verwerkt?

Verwijderd

Topicstarter
het is niet bedoeld om 'te surfen' maar om in te lezen, te bewerken en op te slaan.

ik heb nu Msxml2.ServerXMLHTTP.4.0 in gebruikt, maar kan nu geen nodes meer selecteren...object doesnt support this method er property

handig die SDK, als ik zoek op timeouts krijg ik voorbeelden met activex (Msxml2.ServerXMLHTTP.4.0) en als ik dan zoek op bv selectnode krijg ik voorbeelden met MSXML2.DOMDocument

het ligt aan mij, i know...maar zie door de xmlsmtpactivexhttpsynchronised - bomen het bos niet meer...

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
je kunt van ServerXMLHTTP toch de .responseXML toekennen aan een eigen object???

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Verwijderd

Als het niet de bedoeling is te surfen dan moet je misschien ophouden met te proberen dit op te lossen met een systeem dat bedoelt is om te surfen. Maw haal die code eens uit de view-logic van je applicatie.

Verwijderd

Topicstarter
@Somey; snap niet wat je bedoeld; wat is "view-logic", wat zou jij dan doen als je van een xml bestand van +- 1GB de <titel> waarde op wilt slaan in een database, nadat gecontroleerd is of deze al voorkomt in een andere database(->gabasseerd op user input) ....

Verwijderd

Ik zou die code in een afzonderlijke thread laten uitvoeren. Nu heb je het in een asp pagina staan en zit je vast met die tijdslimiet. In een asp pagina hoort namelijk view logic (dit is het genereren van je html) te staan.

Geen idee of jouw versie van asp threading ondersteund maar het punt is dat je vanuit die asp pagina het proces kan starten zonder dat je moet wachten tot het werk gedaan is.
Pagina: 1