![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Veteran
![]() Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320
|
![]() 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(); } } } 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(); } } 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 |
![]() |
![]() |
![]() |
#2 |
Hero
![]() Registriert seit: 04.09.2001
Beiträge: 894
|
![]() 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 |
![]() |
![]() |
![]() |
#3 |
Veteran
![]() Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320
|
![]() 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 |
![]() |
![]() |
![]() |
#4 |
Veteran
![]() Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320
|
![]() 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 |
![]() |
![]() |
![]() |
#5 |
Hero
![]() Registriert seit: 04.09.2001
Beiträge: 894
|
![]() 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 |
![]() |
![]() |
![]() |
#6 |
Veteran
![]() Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320
|
![]() 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 |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|