/// <summary>
        /// Besipiel für den Download von Blobs über einen WCF- Dienst mittels Streaming. Das Streanming muß in der 
        /// Konfiguration des Clients unter Bindung im Element TransferMode auf Stream eingestellt werden.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDownloadStream_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(tbxDownloadFilename.Text))
            {
                try
                {
                    using (var proxy = new DataStreamsRef.DataStreamsClient())
                    {
                        log.Log(mko.Log.RC.CreateStatus("Downstream von " + tbxDownloadFilename.Text + " in " + Properties.Settings.Default.Downloadverzeichnis + " startet"));

                        System.IO.Stream downstream = proxy.DownstreamData(tbxDownloadFilename.Text);

                        string fname = Properties.Settings.Default.Downloadverzeichnis + "\\" + tbxDownloadFilename.Text;
                        var fstream = new System.IO.FileStream(fname, System.IO.FileMode.Create);

                        // Hier wird der Datenstrom kontinuierlich auf die Festplatte geleitet
                        downstream.CopyTo(fstream);

                        log.Log(mko.Log.RC.CreateStatus("Downstream von " + tbxDownloadFilename.Text + " in " + Properties.Settings.Default.Downloadverzeichnis + " erfolgreich beendet"));
                    }
                }
                catch (Exception ex)
                {
                    log.Log(mko.Log.RC.CreateError("Beim Hochladen von " + tbxUploadFilename.Text + ": " + ex.Message));
                }
            }
        }
        //-----------------------------------------------------------------------------------------------------------
        // Ü: Absicherung von WCF- Diensten gegen den Zugriff Unbefugter


        /// <summary>
        /// Abruf der Liste alle hochgeladener Dateien. Dient als Test für die Authentifizierung und Authorisierung
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void btnGetUploadFilelist_Click(object sender, EventArgs e)
        {
            try
            {
                using (var LoginDlg = new Login())
                {
                    if (LoginDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {

                        using (var proxy = new DataStreamsRef.DataStreamsClient("NetTcpBinding_IDataStreams"))
                        {
                            try
                            {
                                // Anmeldung 
                                proxy.ClientCredentials.Windows.ClientCredential.Domain = LoginDlg.Domain;
                                proxy.ClientCredentials.Windows.ClientCredential.UserName = LoginDlg.User;
                                proxy.ClientCredentials.Windows.ClientCredential.Password = LoginDlg.Password;
                                proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
                                

                                // Abruf der Liste aller hochgeladener Dateien
                                DataStreamsRef.Filedescriptor[] all = proxy.GetAllFileDescriptors_AdminsOnly();

                                // Darstellung
                                grdUploadedFiles.DataSource = all;
#if(DEBUG)
                                foreach (DataStreamsRef.Filedescriptor fd in all)
                                {
                                    Debug.WriteLine("Name= " + fd.FileName + ", SizeInKB= " + fd.SizeInKB);
                                }
                            }
                            catch (Exception ex)
                            {
                                log.Log(mko.Log.RC.CreateError("Beim Abruf von btnGetUploadFilelist_Click(inner): " + ex.Message));
                            }
#endif
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.Log(mko.Log.RC.CreateError("Beim Abruf von btnGetUploadFilelist_Click: " + ex.Message));
            }
        }
 /// <summary>
 /// Methode zum Hochladen einer Datei/Blob. 
 /// Für die Übertragung sollte im Client wie im Server das MTOM - Verfahren gewählt werden,
 /// um das Parsen großer Datenmengen durch XML- Parser beim Lesen der Datentelegramme zu vermeiden.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnUpload_Click(object sender, EventArgs e)
 {
     if (!string.IsNullOrEmpty(tbxUploadFilename.Text) && System.IO.File.Exists(tbxUploadFilename.Text))
     {
         try
         {
             using (var proxy = new DataStreamsRef.DataStreamsClient())
             {
                 log.Log(mko.Log.RC.CreateStatus("Upload von " + tbxUploadFilename.Text + " startet"));
                 proxy.Upload(System.IO.Path.GetFileName(tbxUploadFilename.Text), System.IO.File.ReadAllBytes(tbxUploadFilename.Text));
                 log.Log(mko.Log.RC.CreateStatus("Upload von " + tbxUploadFilename.Text + " erfolgreich beendet"));
             }
         }
         catch (Exception ex)
         {
             log.Log(mko.Log.RC.CreateError("Beim Hochladen von " + tbxUploadFilename.Text + ": " + ex.Message));
         }
     }
 }
        /// <summary>
        /// Gepufferter Download einer Datei. Dies ist der Standard- Modus, wobei die gesammte Datei /Blob
        /// in den Arbeitsspeicher vom Client geladen wird. Bei der üppigen Ausstattung mit Arbeitsspeicher
        /// ist dieser Modus auch noch für Dateien > 1 MB kein Problem und die effizienteste Methode.
        /// Für die Übertragung sollte aber im Client wie im Server das MTOM - Verfahren gewählt werden,
        /// um das Parsen großer Datenmengen durch XML- Parser beim Lesen der Datentelegramme zu vermeiden.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDownload_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(tbxDownloadFilename.Text))
            {
                try
                {
                    using (var proxy = new DataStreamsRef.DataStreamsClient())
                    {
                        log.Log(mko.Log.RC.CreateStatus("Download von " + tbxDownloadFilename.Text + " in " + Properties.Settings.Default.Downloadverzeichnis + " startet"));
                        byte[] data;
                        proxy.DownloadData(out data, tbxDownloadFilename.Text);

                        string fname = Properties.Settings.Default.Downloadverzeichnis + "\\" + tbxDownloadFilename.Text;
                        System.IO.File.WriteAllBytes(fname, data);
                        log.Log(mko.Log.RC.CreateStatus("Download von " + tbxDownloadFilename.Text + " in " + Properties.Settings.Default.Downloadverzeichnis + " erfolgreich beendet"));
                    }
                }
                catch (Exception ex)
                {
                    log.Log(mko.Log.RC.CreateError("Beim Hochladen von " + tbxUploadFilename.Text + ": " + ex.Message));
                }
            }
        }