Laden...

Forenbeiträge von -Rockbiest- Ingesamt 10 Beiträge

22.01.2018 - 22:11 Uhr

Ich würde gerne an die Diskussion vom letzten Mal anknüpfen. Ich bin bereits viele Schritte weiter. Eigentlich kurz vorm Ziel und scheitere doch.

Der Server / FileShare ist durch entsprechende Regeln auf dem Server eingebunden, wo die Applikation liegt.

Nun will ich eine Datei von dem FileShare über die Applikation aufrufen.
Dies läuft für gewöhnlich über:

FileInfo file = new FileInfo(Pfad);

Der Pfad ist der nachfolgende= "http://170.15.1.110/Ordner/Datei.pdf"

Das hat solange einwandfrei funktioniert, solange der Pfad ein lokaler war (Beispielsweise C:/ oder dergleichen). Nun über http:/IP funktioniert es nicht mehr, obwohl ich mir manuell das Ordnerverzeichnis aufrufen kann.

Habt ihr eine Idee, was hier noch berücksichtigt werden muss?

Vorab besten Dank.

24.07.2017 - 13:42 Uhr

Hallo Virus,

gilt der Lösungsansatz auch, bei der Trennung der zwei Server durch ine FireWall?
Der Administrator wird sich nicht darauf einlassen, etwas an dem Konstrukt mit der Firewall zu ändern.

Danke Vorab!

17.07.2017 - 14:29 Uhr

Derjenige hat sich das Problem angehört, bzw. dieses überhaupt erst geschaffen 😄

Wäre dann eventuell folgender Lösungsversuch zielführend?

        
string server = @"\\servernamex123\datenverzeichnis$";
string username = "Username"; //nicht hartkodiert, sondern über Abfrage DB
string pw = "PW"; //nicht hartkodiert, sondern über Abfrage DB

MapNetworkDriveConnect("L:", server, username, pw);



private void MapNetworkDriveConnect(string drive, string server, string user, string password)
    {
        Process p = new Process();
        p.StartInfo.FileName = "net";
        p.StartInfo.Arguments = string.Format("use {0} {1} /user:{2} {3}", drive, server, user, password);
        p.StartInfo.UseShellExecute = false;
        p.Start();
    }

Und im Anschluss dann den bestehenden Code, wie bisher:

// Create New instance of FileInfo class to get the properties of the file being downloaded
        FileInfo file = new FileInfo(filepath);

        // Checking if file exists
        if (file.Exists)
        {
            // Clear the content of the response
            Response.ClearContent();

            // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
            Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", file.Name));

            // Add the file size into the response header
            Response.AddHeader("Content-Length", file.Length.ToString());

            // Set the ContentType
            Response.ContentType = ReturnFiletype(file.Extension.ToLower());

            // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
            Response.TransmitFile(file.FullName);

            // End the response
            Response.End();

        }
        else
        {
            string message = "No such file found on server!! Please check with the Administration!!";
            ClientScript.RegisterStartupScript(GetType(), "alert", "alert('" + message + "');", true);
        }

17.07.2017 - 11:03 Uhr

Verzeihung das war natürlich falsch.
Die Server sind in einem Netzwerk durch eine Firewall von einander getrennt.
Mir wurde mit auf den Weg gegeben, dass vermutlich ein TcpListener zielführend sein sollte.

17.07.2017 - 10:26 Uhr

Also grundsätzlich müsste ich das mit dem Server Admin klären.
Fakt ist der Server über das das Webportal läuft und der fileServer haben keinerlei Netzwerkverbindung mehr zueinander.

Wäre deine Anwendung an dieser Stelle denoch denkbar?
Ich habe nachfolgende Beschreibung gefunden, wäre dies eventuell zielführend und wie bekommen ich die Dokumentthematik hier abgebildet?

static void Connect(String server, String message) 
{
  try 
  {
    // Create a TcpClient.
    // Note, for this client to work you need to have a TcpServer 
    // connected to the same address as specified by the server, port
    // combination.
    Int32 port = 13000;
    TcpClient client = new TcpClient(server, port);

    // Translate the passed message into ASCII and store it as a Byte array.
    Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);         

    // Get a client stream for reading and writing.
   //  Stream stream = client.GetStream();

    NetworkStream stream = client.GetStream();

    // Send the message to the connected TcpServer. 
    stream.Write(data, 0, data.Length);

    Console.WriteLine("Sent: {0}", message);         

    // Receive the TcpServer.response.

    // Buffer to store the response bytes.
    data = new Byte[256];

    // String to store the response ASCII representation.
    String responseData = String.Empty;

    // Read the first batch of the TcpServer response bytes.
    Int32 bytes = stream.Read(data, 0, data.Length);
    responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
    Console.WriteLine("Received: {0}", responseData);         

    // Close everything.
    stream.Close();         
    client.Close();         
  } 
  catch (ArgumentNullException e) 
  {
    Console.WriteLine("ArgumentNullException: {0}", e);
  } 
  catch (SocketException e) 
  {
    Console.WriteLine("SocketException: {0}", e);
  }

  Console.WriteLine("\n Press Enter to continue...");
  Console.Read();
}
16.07.2017 - 15:56 Uhr

Das hört sich gut an!
Die dritte Variante ist denke ich das was gebraucht wird.
Die Ports und Rechte zu erhalten sollte kein Problem sein, da der Nutzer ja ein Interesse hat, dass dies wieder funktioniert 😄

Damit kann ich jetzt denke ich erst einmal arbeiten und schauen wie weit ich komme!

15.07.2017 - 17:02 Uhr

Na bisher konnte ich die Dateien mit einem simplen Pfad (Beispiel: F:/Pfad/document.pdf) erreichen, weil das der reale Pfad, angebunden an den Server war, von dem aus das Webportal aus lief.

Jetzt ist der File Server ausgegliedert, also nicht mehr direkt an den Server gebunden. Dennoch will ich an die Dateien ran, den Fileserver also irgendwie anderweitig ansteuern, die Frage ist doch "nur" wie.

15.07.2017 - 16:29 Uhr

Natürlich muss in der Firewall eine Ausnahme rein aber das muss dann eben auch programmiert werden in C#, oder nicht?

Bisher hat der Pfad etwas in der Richtung ausgegeben:
F:/Pfad/document.pdf

Das war auch bis dato auskömmlich, da der file-server als Laufwerk auf dem Server eingebunden war, wo das Webportal hinterlegt ist. Nun muss ich den File-Server irgendwie rooten, weiß aber nicht wie.

15.07.2017 - 15:47 Uhr

Hi.
Das Problem ist leider, dass mie gänzlich der Ansatz fehlt einen externen Server anzusteuern, der tudem hinter einer Firewall liegt!

15.07.2017 - 15:03 Uhr

Beschreibung:

Hallo Zusammen, ich habe ein Problem!

Ich habe ein Webportal durchprogrammiert, welches bisher auch seine notwendigen Dienste erfüllt hat. Nun hat derjenige, für den ich das Webportal erstellt habe seine Strukturen geändert.

Bisher war das Programm auf einem Server gespeichert. Und der File-Server, auf dem die Dokumente gespeichert sind, die geöffnet werden sollen (und auf dem neue Dokumente gespeichert werden sollen) auf dem Server eingebunden.

Nun hat derjenige Zwecks Erhöhung der Datensicherheit die Verknüpfung zum File-Server entfernt und diesen ungebunden hinter eine FireWall gepackt. Nun funktioniert natürlich das ganze Konstrukt nicht.

Eine Idee, die man mir mit auf den Weg gegeben hat ist, den File-Server zu routen, das ist nur leider ein Thema mit dem ich mich noch nie beschäftigt habe, und daher leider keine Ahnung habe. Nachfolgend mein Code, wie ich ihn bisher verwendet habe:


protected void btnDokumentOeffnen_Click(object sender, CommandEventArgs e)
    {
        string connectionString = ConfigurationManager.ConnectionStrings["dataConnection"].ToString();
        SqlConnection conn = new SqlConnection(connectionString);

        conn.Open();
        SqlCommand commandDatei = new SqlCommand("SELECT fmv_doc_pfad FROM tbl_rpt_1100 WHERE fmv_doc_id = @fmv_doc_id", conn);
        commandDatei.Parameters.AddWithValue("@fmv_doc_id", (string)e.CommandArgument);
        string pfad = (string)commandDatei.ExecuteScalar();
        
        SqlCommand commandVerweis = new SqlCommand("SELECT pfad_adresse FROM tbl_sys_pfad_1000 WHERE pfad_nr = 12", conn);
        string verweis = (string)commandVerweis.ExecuteScalar();
        //New Code for Downloading file
        string filepath = verweis + pfad;   // DIES ERGIBT ZUSAMMEN DEN PFAD AUF DEM FILESERVER, WO DAS DOKUMENT LIEGT! DA DER FILESERVER ANGBUNDEN WAR, WAR DER NACHFOLGENDE CODE BISHER AUSREICHEND GEWESEN




        // Hier muss der Code rein, der die Verbindung durch die FireWall herstellt, um eine Datei weiterhin öffnen zu können!!!




        // Create New instance of FileInfo class to get the properties of the file being downloaded
        FileInfo file = new FileInfo(filepath);

        // Checking if file exists
        if (file.Exists)
        {
            // Clear the content of the response
            Response.ClearContent();

            // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
            Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", file.Name));

            // Add the file size into the response header
            Response.AddHeader("Content-Length", file.Length.ToString());

            // Set the ContentType
            Response.ContentType = ReturnFiletype(file.Extension.ToLower());

            // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
            Response.TransmitFile(file.FullName);

            // End the response
            Response.End();
        }
        else
        {
            string message = "No such file found on server!! Please check with the Administration!!";
            ClientScript.RegisterStartupScript(GetType(), "alert", "alert('" + message + "');", true);
        }


Schlagwörter: <C# FIREWALL ROUTEN DATEILOAD>