/// <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)); } } }