Jag har precis flyttat en sida från en webserver till en annan. Det som skiljer sig att den nya servern kör win2003 server med IIS 6.0.
Den gamla var en 5.0.
Sidan laddas och jag får inte några felmeddelanden.
<% function funTestPing(ip)
rem ***********************************************************
rem * Create the object
rem ***********************************************************
Set Pinger = Server.CreateObject("AspPing.Conn")
Pinger.RemoteHost = ip
Pinger.PingCount = 2
varPingResult = Pinger.Ping
if instr(varPingResult, "Request timed out") > 0 then
funTestPing = ""
else
varLeftCut = InStrRev(varPingResult, "time=")+5
varPingTimeCut = mid(varPingResult, varLeftCut, 5)
varRightCut = InStrRev(varPingTimeCut, "ms")+1
varPingTimeCut = left(varPingTimeCut,varRightCut)
funTestPing = varPingTimeCut
end if
Set Pinger = nothing
end function %>
När jag kör funktionen så returneras inte något. ??? Är detta något som har med säkerhet att göra?
Är det någon som har en vild teori om i vilken ända man ska börja felsöka?
Inget konkret:
1. Använd bara CreateObject (utan Server) för att instansiera utanför COM+-kontexten.
2. Byt anonymous user på sidan till "Administrator" för att se om det är ett rättighetsproblem.
3. Mixtra med inställningar typ "Isolation level", "Allow service to interact with desktop" mm ..'
Sen är ju nästa fråga hur mycket tid man vill lägga ner på en tredjepartskomponent utan källkod som har några år på nacken?
1. Leta upp en annan ping-komponent. Det borde finnas nyare och bättre.
2. Använd ping.exe i Windows:
Set X = CreateObject("WScript.Shell")
Set Y= X.Exec("cmd /C ping XXX.XXX.XXX.XXX")
Do While True
If Not Y.StdOut.AtEndOfStream Then
pingres = pingres & Y.StdOut.Read(1)
Else
Exit Do
End If
Loop
Response.Write pingres
Den enda skillnaden blir att du får ändra lite i din strängfunktioner.
Denna komponent har vett nog att skriva ut ett felmeddelande när jag försöker köra den.
<%
Set myping = Server.Createobject("Dynu.Ping")
Response.Write("<PRE>")
REM the below line will ping the host "dynu.com" with a 32 byte packet, 2 echo with 1000 millisecond timeout and display its result.
Response.Write(myping.ping("dynu.com", 2, 32, 1000))
Response.Write("</PRE>")
Set myping = nothing
%>
ger resultatet:
Error creating process
Access is denied.
Antar att det är samma rättighetsproblem med den andra komponenten. Var sätter man rättigheter för dessa komponenter?
I felsökningssyfte har jag gett IIS_user och IIS_wpg fulla rättigheter i hela webrooten.
Antar att det är samma rättighetsproblem med den andra komponenten.
Nja. Du har inte konstaterat att det fanns ett rättighetsproblem med den andra komponenten.
mattiasnordin skrev:
Var sätter man rättigheter för dessa komponenter?
Ja, alltså komponenten i sig har ju tillräckliga rättigheter. Annars skulle du inte kunna instansiera den. Frågan är snarare vilken "process" det är den i sin tur försöker skapa? För att få reda på det är det nog enklast att ha tillgång till källkoden.
/red: Eller missförstår jag? På vilken rad kommer "error creating process"?
Har också för mig att det du säger stämmer, men trots allt:
1.) Komponenterna är tänkta att kunna fungera i IIS:en från Anonymous-kontot (vilket de också gör i IIS 5).
2.) Man pingar nog inte via "råa" sockets i Windows. Man använder icmp.dll.
Men jag har ändrat så mycket så jag vet inte exakt vad det var som gjorde att det fungerar.
Har förljande konton, som verkar vara förknippade med IIS.
ASPNET
IUSR_datornamn
IWAM_datornamn
GRUPP: IIS_WPG
Alla dessa konton har fått fulla rättigheter på alla filer i hela webrooten.
Alla dessa konoton har fulla rättigheter på både icmp.dll och ping.exe.
Jag är van med att ha ett "IUSR_datornamn" konto, vad gör restrerande konton?
Vad av mina förändringar är det som har gjort att Dynu.ping fungerar?
Den andra pingkomponentet fungerar fortfarande inte ?!
Jag är lite intresserad över att få den att fungera för att den returnerar bara ping replyen och inte hela ping.exe resultatet.
Dynu.ping returnerar också en massa skräp jag inte är intressarad av. Är det prestandakrävande att klippa ut "749ms" ur följande sträng?
Pinging dynu.com [198.144.7.123] with 32 bytes of data:
:)
Reply from 198.144.7.123: bytes=32 time=749ms TTL=126
Ping statistics for 198.144.7.123:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Alla dessa konton har fått fulla rättigheter på alla filer i hela webrooten.
Känns märkligt att de skulle påverka. Standard läs- och scripträttigheter borde räcka? ASPNET-kontot borde du inte behöva blanda in öht. Det är väl "vanlig" ASP?
Alla dessa konoton har fulla rättigheter på både icmp.dll och ping.exe.
Läs- o exekver på ping.exe och enbart läs på icmp.dll ska räcka, och det är väl standard?
Ett experiment:
Kopiera in ping.exe i samma mapp som scriptet. Sätt läs- o exekverrättigheter för IUSR_ .. och kör sen "mitt" ping-script med:
Set Y= X.Exec("cmd /C " & Server.MapPath(".") & "\ping.exe XXX.XXX.XXX.XXX")
Vad händer?
Vad av mina förändringar är det som har gjort att Dynu.ping fungerar?
Ingen aning. Jag har inga problem med något av det du räknar upp i IIS 5 med default-inställningar. Är IIS 6 så mycket tajtare eller har du kört nån "lock-downgrej"?
Är det prestandakrävande att klippa ut "749ms" ur följande sträng?
Tja .. Är det jobbigt att cykla? Det är naturligtvis mer krävande än att inte göra det. Men å andra sidan så orsakar ju pingen i sig sekundlånga "trådblockeringar" som antagligen är mycket värre. Är den här pingningen nåt du planerar att göra på sekundbasis? Annar tycker jag inte du ska bry dig så mycket.
OK. Kan tillägga att jag precis provade "mitt" ping-script på en helt clean out-of-the-box (förutom att jag slog på ASP-stödet) W2k3/IIS6 i VMWare. Det funkade hur bra som helst. Det finns alltså inget i den "tajtare" säkerheten som påverkar ICMP/ping, vad jag kan se.
275 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2