2009-09-15 14 views
5

Mam kilka zapytań do strony internetowej, które trwają długo, aby uruchomić ze względu na model danych i ilość danych przechowywanych w tabelach. Do tej pory stosowałem je ręcznie w bazie danych, aby uniknąć problemów z przekroczeniem limitu czasu itp. Właściciel witryny poprosił o udostępnienie ich w witrynie, aby mógł uzyskać wyniki zapytania.Najlepszy sposób na wykonywanie długich zapytań DB w klasycznej ASP?

Myślałem o zrobieniu tego za pośrednictwem usługi internetowej .NET i o tym, że klasyczna strona ASP nazywa to tak asynchronicznie. Strona internetowa zainicjowałaby proces i zanim przekieruje użytkownika na inny ekran. Usługa internetowa uruchomi następnie zapytanie i wyśle ​​użytkownikowi e-mailem wyniki w pliku CSV.

Jednak nie wydaje mi się, żeby to działało. Usługa działa poprawnie, jeśli wywołam ją na ekranie w IE, ale wywołanie jej przez wywołanie Ajax w ASP wydaje się być problemem - nie generuje się błędu, ale nie jest też tworzony plik CSV.

Załączam klasyczny kod ASP poniżej. Usługa ma tylko jedną metodę z parametrem nazwy e-mail, która jest typu ciąg. Czy ktoś może zobaczyć cokolwiek z nim nie tak? Czy jest to najlepszy sposób na zrobienie tego, czy też powinienem myśleć o innym podejściu?

Dzięki z góry,

Phil

KOD

<% 
message = "http://wwww.example.com/service/query.asmx/GetResults?email=test" 
set req = server.createobject("MSXML2.XMLHTTP") 
With req 
    .open "GET", message, False 
    .setRequestHeader "Content-Type", "text/xml" 
    .send 
End With 

works = req.responseText 
response.redirect "http://www.bbc.co.uk" 

%> 

Odpowiedz

3

Pomysł asynchronicznie zainteresowanie pracę i przygotowanie do jej dostarczenia w późniejszym terminie wydaje się bardzo rozsądne do mnie. Nie mówię wystarczająco dobrze na ASP, żeby wiedzieć, co się załamuje z twoją próbą, ale czy to naprawdę jest twój telefon? Czy usługa seb również cierpi z powodu przekroczenia limitu czasu połączenia HTTP?

Moje podejście byłoby dla żądania Ajax, aby umieścić żądanie w kolejce i wrócić, nie ma potrzeby przekierowania, nadal jesteś na stronie, na której użytkownik zgłasza żądanie, twój skrypt Java może po prostu uznać, że prośby zostały wysłane. Alterntively, twoja bardziej tradycyjna "prześlij stronę, ukryj żądanie, wyświetl inną stronę" aplikacja może działać, ale przechowywanie jest po to, aby umieścić żądanie w kolejce.

Zaletą kolejkowania jest to, że kontrolując liczbę demonów możemy uzyskać kontrolowaną równoległość w obsłudze żądań - unikaj przeciążania DB. Również kolejki mogą trwać i pozwolić na spokojne dostarczanie odpowiedzi.

Zakładam, że kolejki MS pozwalają na przeprowadzenie przez demona przetwarzania żądania i dostarczenie odpowiedzi. Oczywiście e-mail działa, ale uderza mnie jako odrobinę nieprzyjazny. Dzięki interfejsom w stylu Ajax byłoby całkiem łatwo niewidocznie sondować status żądań i uzyskiwać wyniki, gdy są gotowe, lub nawet używać dostarczania odpowiedzi w stylu Comet w stylu push.

1

Problem tutaj, jako że djna zaznaczono, że nie wywołujesz funkcji zwrotnej. Z powodu asynchronicznego aspektu Ajax skonfigurowano funkcję zwrotną, która zostanie wykonana po zakończeniu połączenia Ajax.

Krótko mówiąc:
Wywołać webservice z funkcji javascript, najlepiej przy użyciu JQuery, aby uniknąć krzyżowego przeglądarkę Niezgodności

Kod:

<div id="results">Processing query. Please wait</div> 

<script type="text/javascript"> 
$(document).ready(function(){ 
    $("#results").load("http://wwww.mywebsite.com/service/query.asmx/GetResults?email=test&Rnd=" + Math.random().toString()); 
}); 
</script> 
Powiązane problemy