WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 24.05.2007, 18:30   #1
Hussl
Veteran
 
Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320


Frage C# & ASP.Net: Funktion ausführen

S'Gott, wieder mal ein Problem. Und zwar möchte ich eine URL aufrufen können, die dann eine Funktion startet. Diese Funktion soll aber in einem neuen Thread starten, also parallel zum aufrufenden Thread. Bissl umständlich erklärt...

Also ich ruf im Browser die URL http://blabla/eineseite.aspx auf. In der führe ich eine Funktion aus. Der Browser soll aber nicht auf die Erledigung der Funktion warten, sondern die Funktion starten und fertig. Der Rest wird in der Funktion abgearbeitet.

So weit so gut. Das hab ich mal in einer dll gespeichert, die ich auf meinen Webhost kopieren will:

Code:
using System;
using System.Net;
using System.Text;
using System.Data;
using System.IO;
using System.Xml;

namespace Proxy
{
    public class Data
    {
        public string Link = @"http://www.chili-it.at";
        public string ProxyFile = @"D:\Downloads\Proxies.txt";
        public string LogFile = @"D:\Downloads\Logfile.txt";
        public string Logging = @"D:\Downloads\Logging.txt";
    }
   
    public class Program
    {
        public delegate void delegateCrawler();
     
        public void Starter()
        {
            delegateCrawler dc = new delegateCrawler(Crawler);
            AsyncCallback callback = new AsyncCallback(Finisher);
            IAsyncResult result = dc.BeginInvoke(callback, dc);
        }

        public void Finisher(IAsyncResult ar)
        {
            Data d = new Data();
           
            StreamWriter sfile = new StreamWriter(d.LogFile, true);
            sfile.WriteLine("Auftrag ausgeführt am {0}.", DateTime.Now);
            sfile.Close();
        }

        public void Crawler()
        {
            string strLine;
            Data d = new Data();
            StreamReader sr = new StreamReader(d.ProxyFile);
            StreamWriter sw = new StreamWriter(d.Logging, true);
            char[] ProxDataSep = { ':' };
            while ((strLine = sr.ReadLine()) != null)
            {
                string[] ProxData = strLine.Split(ProxDataSep);
                try
                {
                    WebRequest WebReq = WebRequest.Create(d.Link);
                    WebProxy WebProx = new WebProxy(ProxData[0], Convert.ToInt32(ProxData[1]));
                    WebReq.Proxy = WebProx;
                    WebReq.Timeout = 5000; // Timeout in ms
                    WebResponse WebResp = WebReq.GetResponse();
                }
                catch (Exception e)
                {
                    sw.WriteLine(string.Concat(strLine, "\t", e.Message, "\t", DateTime.Now));
                    continue;
                }
                sw.WriteLine(string.Concat(strLine, "\tAnfrage erfolgreich\t", DateTime.Now));
            }
            sr.Close();
            sw.Close();
        }
    }
}
Was ich machen will, ist eine Liste von Proxyservern, die in einer Textdatei gespeichert sind, abklappern und eine Info zu speichern. z.B. ob der Server nicht erreichbar ist, ob die Anfrage ok war, usw usf. Die Proxys sind im Format Host:Port gespeichert (1 Proxy pro Zeile)

Mit folgendem Code rufe ich die Funktionen auf:
Code:
<%@ Page Language="C#" Async="true" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    Auftrag ausgeführt.
    </div>
    </form>
</body>
</html>

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Proxy;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Proxy.Program pp = new Proxy.Program();
        pp.Starter();
        //pp.Crawler();
    }
}
Wenn ich das lokal ausführe, dann führt er die Funktion Crawler aus und legt die Logfiles auch richtig an. Wenn ich das ganze auf meinem Webhoster kopiere, dann führt er nix aus und legt auch keine Logs an. Schreibrechte hab ich in dem Ordner, die Pfade zu den Dateien stimmen ebenfalls.

Hat jemand eine Ahnung an was das liegen kann? Scheiterts vielleicht
an irgendwelchen Berechtigungen fürs Framework? Ich kenn mich gar ned aus
____________________________________
Nein, ich bin nicht die Signatur, ich putz hier nur.

http://www.chili-it.at
Hussl ist offline   Mit Zitat antworten
Alt 25.05.2007, 17:53   #2
Biri
Hero
 
Registriert seit: 04.09.2001
Beiträge: 894


Standard

hi,

bist du sicher, dass du schreibrechte in dem ordner hast?
hast du, oder der asp.net prozess schreibrechte?
unter welchem user läuft deine asp.net anwendung?
verwendest du impersonation (webapplikation läuft dann mit rechten des ausführenden users), oder läuft deine anwendung unter dem konto eines netzwerkdienstes?

Auf welchem server läuft deine anwendung?
Unter Windows 2003 gibt es Application Pools für den IIS und du must dem application pool Schreibrechte geben.

http://www.microsoft.com/technet/pro...s/appisoa.mspx

fragen über fragen....

fg
hannes
Biri ist offline   Mit Zitat antworten
Alt 28.05.2007, 19:11   #3
Hussl
Veteran
 
Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320


Standard

Sorry für die Verspätung, war aber bis jetzt auf Achse

Ich kann alle deine Fragen nicht beantworten. Als Webhost hab ich Inode XHost Windows Medium. Und unter welchen Usern die Dienste laufen usw. kann ich nicht sagen. Der Support ist leider auch sehr inkompetent, daher schreib ich denen das gar nicht...
____________________________________
Nein, ich bin nicht die Signatur, ich putz hier nur.

http://www.chili-it.at
Hussl ist offline   Mit Zitat antworten
Alt 28.05.2007, 19:12   #4
Hussl
Veteran
 
Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320


Standard

Ach ja. Schreibrechte passen, weil wenn ich die Funktion direkt ausführe [Funct. Crawler() ], dann legt er entsprechend ein Logfile an.
____________________________________
Nein, ich bin nicht die Signatur, ich putz hier nur.

http://www.chili-it.at
Hussl ist offline   Mit Zitat antworten
Alt 28.05.2007, 21:12   #5
Biri
Hero
 
Registriert seit: 04.09.2001
Beiträge: 894


Standard

hi,

nachdem ein direkter funktionsaufruf funktioniert, ist das problem wohl, dass der security context beim erstellen eines neuen threads nicht übernommen wird - d.h., der neue thread hat dann nicht die nötigen rechte.

Ab asp.net 2.0 kann man aber konfigurieren, dass genau das gemacht wird, nur finde ich im moment leider keinen link zu genaueren erklärungen. Ich hoffe, ich konnte dir wenigstens einen hinweis in die richtige richtung geben.

Die generellen rechte sind also o.k. (nachdem ein direkter aufufuf funktioniert), nur ein neuer thread hat eben nicht diese rechte.

fg
hannes
Biri ist offline   Mit Zitat antworten
Alt 28.05.2007, 21:16   #6
Hussl
Veteran
 
Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320


Standard

Ja, sowas in die Richtung hab ich mir schon gedacht. Ich werde das einfach mal an den Support weiterschicken und schauen, was die mir zurückschreiben ;-)

Vielen Dank jedenfalls!
____________________________________
Nein, ich bin nicht die Signatur, ich putz hier nur.

http://www.chili-it.at
Hussl ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:13 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag