Avatar billede vraa Nybegynder
03. april 2006 - 12:40 Der er 19 kommentarer

Redigere i filer på andre servere

Er det muligt i et asp.net projekt at redigere i filer på andre servere (i dette tilfælde "web.config" filen)?
Jeg har de koder der skal til for at logge på serveren.

Jeg arbejder i C# og .net 1.1.
Avatar billede dr_chaos Nybegynder
03. april 2006 - 17:28 #1
Ja måske men det ville nok være bedre at hente web.config filen via en webservice og foretage ændringerne lokalt og så bruger web.servicen til at overskrive den anden fil.
På den måde kan du også lave noget backup af de filer du redigerer i.
Avatar billede vraa Nybegynder
03. april 2006 - 21:14 #2
Har du noget eksempel eller...?
Er det en webservice jeg selv skal lave, og hvis det er, er der så andre muligheder til at løse mit problem?
Avatar billede arne_v Ekspert
04. april 2006 - 01:28 #3
jeg tror at der er nogle security aspekter der skal gennemtænkes og
nogle overvejelser om hvad der kan ske når web app skal genstartes
Avatar billede dr_chaos Nybegynder
04. april 2006 - 08:29 #4
Det er en webservice du skal lave.
Avatar billede vraa Nybegynder
04. april 2006 - 08:39 #5
Jeg hoster nogle forskellige sites og hvis jeg skal lave sådan en webservice skal den vil ud på alle hjemmesiderne jeg ønsker at hente filer fra??
Det optimale vil være at kodemæssigt i én application og kunne hente filer fra forskellige servere. Men det er ikke muligt?
Hvis det kun er muligt med en webservice, hvordan griber jeg så det an?

Skal nok sætte point'ene op hvis det bliver for tricky :-)
Avatar billede dr_chaos Nybegynder
04. april 2006 - 10:46 #6
Du skal lave en metode i webservicen som kan modtage en sti på den fil som skal hentes og evt en brugernavn og password som tillader at hente filen.

metoden kan se ud på denne måde pseudo kode:

[WebMethod]
public byte[] HentFil(string url, string brugernavn, string password)
{
//hent fil ned i et bytearray


//returner byte array.
return et byte array med fil.
}

[WebMethod]
public void UploadFil(string url, string brugernavn, string password, byte[] fil)
{
//upload fil

}
Avatar billede dr_chaos Nybegynder
04. april 2006 - 10:46 #7
Det kan også gøres på andre måde
Avatar billede vraa Nybegynder
04. april 2006 - 13:14 #8
Andre måder ??

Tænker du så på andre former for webservices eller...?

Vil meget gerne centralisere denne funktionalitet. Derfor vil jeg meget gerne væk fra webservices på det enkelte site.
Avatar billede dr_chaos Nybegynder
04. april 2006 - 13:51 #9
Du laver kun en webservice og den er så i stand til at håndterer det hele.
Avatar billede dr_chaos Nybegynder
04. april 2006 - 13:52 #10
se de metoder som jeg har foreslået
Avatar billede vraa Nybegynder
07. april 2006 - 09:31 #11
Hey. Bare lige for at være sikker.
Jeg har et CMS på et domæne. Det CMS skal kunne tilgå web.config i webprojekter på andre domæner, samt oprette mapper der.
Ovenstående skal altså kun køre på førstnævnte domæne og hvorfra opgaverne skal udføres?

Hvis det er tilfældet vil jeg være meget taknemmelig hvis du kunne give mig et kodeeks. på hentfil og upload fil samt samt oprette, redigere og slette mapper.

Scenario eks.
Cms kalder webservicen og modtager web.config filen for at redigere i den.
Cms sender filen tilbage igen og overskriver den web.config som eksisterer der i forvejen.
Derudover vil det være 150% perfekt hvis webservicen også kan oprette, redigere og slette mapper på et andet domæne.

Hvis du kan hjælpe mig med ovenstående kan du næsten selv bestemme hvor mange point du vil have :-)

Er meget grøn i webservices :-(
Avatar billede dr_chaos Nybegynder
07. april 2006 - 09:44 #12
jeg kan godt lave et eksempel men det bliver først i aften eller i løbet af weekenden :)
Avatar billede vraa Nybegynder
07. april 2006 - 12:54 #13
Lyder helt perfekt :-)
Avatar billede dr_chaos Nybegynder
13. april 2006 - 09:47 #14
Hej jeg har ikke glemt dig.
jeg sætter mig til at lave webservicen nu.

Jeg bruger asp.net 2.0 til den og ftp protokollen.
Avatar billede dr_chaos Nybegynder
13. april 2006 - 14:00 #15
Hej igen jeg har lavet et delvist eksempel til dig:
webservice:

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.IO;
using System.Net;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    public Service()
    {

        //Uncomment the following line if using designed components
        //InitializeComponent();
    }

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }
    [WebMethod]
    public byte[] GetFile(string username, string password, string ftpsite, string fileName, string port)
    {
        Uri u = new Uri("ftp://" + username + ":" + password + "@" + ftpsite + ":" + port + "/" + fileName);
        if (u.Scheme != Uri.UriSchemeFtp)
        {
            return null;
        }
        WebClient request = new WebClient();
        try
        {
            byte[] newFileData = request.DownloadData(u.ToString());
            System.Diagnostics.Debug.WriteLine(System.Text.Encoding.UTF8.GetString(newFileData));
            return newFileData;
        }
        catch (WebException e)
        {
            return null;
        }

    }
    [WebMethod]
    public void UploadFile(string username, string password, string ftpsite, string fileName, string port, byte[] file)
    {

        FtpWebRequest ftr;
        ftr = (FtpWebRequest)FtpWebRequest.Create("ftp://" + username + ":" + password + "@" + ftpsite + ":" + port + "/" + fileName);
        ftr.Timeout = 10000;
        ftr.ReadWriteTimeout = 10000;
        ftr.KeepAlive = false;
        ftr.UseBinary = true;
        ftr.Method = WebRequestMethods.Ftp.UploadFile;
        ftr.ContentLength = file.Length;
        Stream requestStream = ftr.GetRequestStream();
        requestStream.Write(file, 0, file.Length);
        requestStream.Close();
        FtpWebResponse response = (FtpWebResponse)ftr.GetResponse();

        System.Diagnostics.Debug.WriteLine("Append status: {0}", response.StatusDescription);

        response.Close(); 

    }
    [WebMethod]
    public string ListFolders(string username, string password, string ftpsite, string Folder, string port)
    {
        FtpWebRequest ftr;
        ftr = (FtpWebRequest)FtpWebRequest.Create("ftp://" + username + ":" + password + "@" + ftpsite + ":" + port + "/" + Folder);
        ftr.Timeout = 10000;
        ftr.ReadWriteTimeout = 10000;
        ftr.KeepAlive = false;
        ftr.UseBinary = true;
        ftr.Method = WebRequestMethods.Ftp.ListDirectory;
        FtpWebResponse response = (FtpWebResponse)ftr.GetResponse();
        Stream s = response.GetResponseStream();
        StreamReader reader = new StreamReader(s);
        string responseFromServer = reader.ReadToEnd();
        response.Close();
        return responseFromServer;
    }

}
Avatar billede dr_chaos Nybegynder
13. april 2006 - 14:02 #16
FOr at bruge den skal du bruge en kode som minder om:

C:\Program Files\Microsoft Visual Studio 8\VC\wsdl /out:FileWebservice.cs http:
//localhost/Fileadminwebservice/Service.asmx?WSDL

Det kommer an på hvor webservicen er placeret.
Avatar billede dr_chaos Nybegynder
13. april 2006 - 14:03 #17
FileWebservice.cs ligger du så ind i dit projekt eller compiler det til en dll som du kan smide i bin mappen.
Avatar billede dr_chaos Nybegynder
13. april 2006 - 14:03 #18
Her er et eksempel på hvordan du uploader en fil:
  FileStream fs = new FileStream("c:\\helpdesk.gif", FileMode.Open);
        byte[] buffer =new byte[fs.Length];
        fs.Write(buffer, 0, Convert.ToInt32(fs.Length));
        Service s = new Service();
        s.UploadFile("Jee", "123456", "Localhost", "helpdesk.gif", "21", buffer);
Avatar billede dr_chaos Nybegynder
13. april 2006 - 14:04 #19
Jeg har ikke lavet alle metoder men jeg håber at det kan give dig en god ide til hvad du kan gøre
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester