Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Campy
Thema: Installer mit Updater
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

schau dir doch mal AdvancedInstaller an.

Thema: Bewertung SW-Architektur "High-Performance" - Echtzeitaktualisierung
Am im Forum: Rund um die Programmierung

Ich mache das auch immer so mit SignalR, entweder nur ID in und dann GET oder wie FZelle bereits gesagt hat einen Payload mitschicken.
Performancetechnisch funktioniert das bei uns auch mit 100en verbundenen Clients super - auch wenns da nicht 100e Einträge sind.

Thema: SMTP + Anhänge in Container (Alpine)
Am im Forum: Rund um die Programmierung

Danke Abt, ich konnte das Projekt auch erfolgreich und ohne Probleme unter WSL debuggen.
Da es auch dort ohne Probleme lief, haben wir uns weiter auf die Suche gemacht =>

Es lag wohl am Zusammenspiel von Docker Port-Mappings des Relay Containers und der OpnSense Firewall die eingesetzt wird.
Eigentlich befinden sich die SMTP-Container und der Relay Container im gleichen Netzwerk - durch das PortMapping hat das Docker anscheinend anders geroutet und so lag die OpnSense dazwischen. Komisch und fragwürdig bleibt nur, wieso dies erst beim überschreiten der MTU Size geblockt hat.

Thema: SMTP + Anhänge in Container (Alpine)
Am im Forum: Rund um die Programmierung

Zitat von Abt
Campy, naja; die Fehlermeldung zeigt einen Socket-Fehler beim Ressounrcezugriff.
Wenn Du keine Attachments verlinkst, wird eben das Zeug auch nicht ausgeführt; ergo ist der Bug wohl egal, wenn Du keine Attachments hast.

Ja das stimmt, jedoch funktioniert ein Teil (alle sind PDFs die vom gleichen Generator generiert wurden).
Zitat von Abt
Kannst Du mal bisschen mehr Infos geben wie zB: wo liegen die Ressourcen? Worin unterscheiden sich Ressourcen, die funktionieren und die nicht funktionieren?
Ansonsten einfach mal MailKit Source ziehen und selbst debuggen; das is ja das schöne an Open Source.

Die E-Mails liegen in einer Datenbank (postgresql) als bytea (byte[]) und werden per WebApi Dienst abgeholt


        private byte[] _Attachment1;
        public virtual byte[] Attachment1
        {
            get { return _Attachment1; }
            set { _Attachment1 = value; NotifyPropertyChanged("Attachment1"); }
        }

So wird es an Mailkit übergeben:


 var body = new TextPart("plain")
                {
                    Text = email.Body
                };

                var multipart = new Multipart("mixed");
                multipart.Add(body);
                
                if (email.Attachment1 != null)
                {
                    var attachment1 = new MimePart("application", "pdf")
                    {
                        Content = new MimeContent(new MemoryStream(email.Attachment1), ContentEncoding.Default),
                        ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
                        ContentTransferEncoding = ContentEncoding.Base64,
                        FileName = email.Attachment1Name
                    };
                    multipart.Add(attachment1);
                }

                // now set the multipart/mixed as the message body
                message.Body = multipart;

Hast du einen Tipp wie ich es am besten Debuggen könnte, da der Fehler nur im Docker Container besteht obwohl alle Rahmenparameter sonst die Gleichen sind.
Führe ich die Anwendung bei mir unter Windows aus funktioniert es sofort problemlos..

Danke im Voraus!


Thema: SMTP + Anhänge in Container (Alpine)
Am im Forum: Rund um die Programmierung

Zitat von dannoe
Der Autor der Library vermutet "probably a .NET Core runtime bug on Linux". Wenn das tatäschlich so ist, dann bringen dir leider auch andere Libraries nichts, sofern diese auf der gleichen Basis aufsetzen.

Was halt komisch ist und bleibt, das Problem besteht überhaupt nicht, wenn keine Anhänge angehängt wurden, und auch nur bei einem Teil von Anhängen..

Thema: SMTP + Anhänge in Container (Alpine)
Am im Forum: Rund um die Programmierung

Ja da hast du Recht - ich habs sogar schon mit System.Net.Mail probiert gehabt (einfach mal einen Schritt zurück) aber auch da kam der gleiche Fehler

Thema: SMTP + Anhänge in Container (Alpine)
Am im Forum: Rund um die Programmierung

Habs nun mit einem aktuellen Ubuntu getestet - funktioniert ebenso nicht.

Fehler
System.IO.IOException: Connection timed out
---> System.Net.Sockets.SocketException (110): Connection timed out
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at MailKit.Net.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
--- End of inner exception stack trace ---
at MailKit.Net.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at MailKit.Net.Smtp.SmtpStream.ReadAheadAsync(Boolean doAsync, CancellationToken cancellationToken)
at MailKit.Net.Smtp.SmtpStream.ReadResponseAsync(Boolean doAsync, CancellationToken cancellationToken)
at MailKit.Net.Smtp.SmtpStream.ReadResponse(CancellationToken cancellationToken)
at MailKit.Net.Smtp.SmtpClient.DataAsync(FormatOptions options, MimeMessage message, Int64 size, Boolean doAsync, CancellationToken cancellationToken, ITransferProgress progress)
at MailKit.Net.Smtp.SmtpClient.SendAsync(FormatOptions options, MimeMessage message, MailboxAddress sender, IList`1 recipients, Boolean doAsync, CancellationToken cancellationToken, ITransferProgress progress)
at MailKit.Net.Smtp.SmtpClient.Send(FormatOptions options, MimeMessage message, CancellationToken cancellationToken, ITransferProgress progress)

Der Logoutput vom Postfix Relay sieht so aus:
Fehler
Mar 18 08:21:00 postfix/smtpd[814]: connect from unknown[172.16.3.4]
Mar 18 08:21:00 postfix/smtpd[814]: B76D31A0A3F: client=unknown[172.16.3.4]
Mar 18 08:21:00 postfix/cleanup[815]: B76D31A0A3F: message-id=<[email protected]>
Mar 18 08:23:00 postfix/smtpd[630]: timeout after DATA (65713 bytes) from unknown[172.16.3.4]
Mar 18 08:23:00 postfix/smtpd[630]: disconnect from unknown[172.16.3.4] ehlo=1 mail=1 rcpt=1 data=0/1 commands=3/4

Thema: SMTP + Anhänge in Container (Alpine)
Am im Forum: Rund um die Programmierung

Hallo zusammen,

ich habe folgenden Code der in einem Docker Container (mcr.microsoft.com/dotnet/runtime:5.0-alpine3.12-amd64) zum Versenden von E-Mails ausgeführt wird:
(Ich weiß, der Code ist noch nicht optimal aber habe ihn in ein Testprojekt kopiert.


var message = new MimeMessage();
                message.From.Add(new MailboxAddress(email.SenderName.Length > 0 ? email.SenderName : Parameters["Sendername"],
                    email.SenderEmail.Length > 0 ? email.SenderEmail : Parameters["Sender"]));

                var recipients = new List<string>();
                var ccRecipients = new List<string>();
                var bccRecipients = new List<string>();

                if (!string.IsNullOrEmpty(email.Recipients))
                    recipients = new List<string>(email.Recipients.Split(";".ToCharArray()));

                if (!string.IsNullOrEmpty(email.RecipientsCC))
                    ccRecipients = new List<string>(email.RecipientsCC.Split(";".ToCharArray()));

                if (!string.IsNullOrEmpty(email.RecipientsBCC))
                    bccRecipients = new List<string>(email.RecipientsBCC.Split(";".ToCharArray()));

                if (bccRecipients != null)
                {
                    foreach (string bccRecipient in bccRecipients)
                        if (!string.IsNullOrEmpty(bccRecipient))
                            message.Bcc.Add(MailboxAddress.Parse(bccRecipient));
                }

                if (ccRecipients != null)
                {
                    foreach (string ccRecipient in ccRecipients)
                        if (!string.IsNullOrEmpty(ccRecipient))
                            message.Cc.Add(MailboxAddress.Parse(ccRecipient));
                }

                if (recipients != null)
                {
                    foreach (string Recipient in recipients)
                        if (!string.IsNullOrEmpty(Recipient))
                            message.Cc.Add(MailboxAddress.Parse(Recipient));
                }

                message.Subject = email.Subject;

                var body = new TextPart("plain")
                {
                    Text = email.Body
                };

                var multipart = new Multipart("mixed");
                multipart.Add(body);
                
                if (email.Attachment1 != null)
                {
                    var attachment1 = new MimePart("application", "pdf")
                    {
                        Content = new MimeContent(new MemoryStream(email.Attachment1), ContentEncoding.Default),
                        ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
                        ContentTransferEncoding = ContentEncoding.Base64,
                        FileName = email.Attachment1Name
                    };
                    multipart.Add(attachment1);
                }

                // now set the multipart/mixed as the message body
                message.Body = multipart;

                try
                {
                    using (var client = new SmtpClient())
                    {
                        client.Connect(server, 25, false);

                        // Note: only needed if the SMTP server requires authentication
                        if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
                            client.Authenticate(username, password);

                        client.Send(message);
                        client.Disconnect(true);
                    }

                    _logger.LogDebug("Die E-Mail {mailid} wurde erfolgreich versendet", email.Id);
                    email.Success = true;
                }
                catch(Exception ex)
                {
                    _logger.LogError(ex, "Fehler beim Versenden der E-Mail {mailid}", email.Id);
                }
                finally
                {
                    email.RetryCount = email.RetryCount + 1;
                    _logger.LogDebug("Neuer RetryCount für E-Mail {maild} beträgt {retrycount}", email.Id, email.RetryCount);
                    email.LastTry = DateTime.Now;

                    if (emailProxy.Put(email))
                        _logger.LogDebug("Die E-Mail wurde erfolgreich aktualisiert");
                    else
                        _logger.LogError("Fehler beim Speichern der Änderungen der E-Mail");
                }

Das ganze funktioniert nun im Docker Container, solange Anhang1 nicht zwei Bilder enthält (Dateigröße gute 50kb)..
Starte ich die Anwendung unter Windows, gleicher SMTP Server und gleiche Datenbank, funktioniert es sofort.

Hat jemand eine Idee? Sollte ich mal ein Ubuntu Image probieren?

Vielen Dank!

Thema: Versionierung mit GitVersion + GitversionTask deprecated
Am im Forum: Rund um die Programmierung

Abt du hast natürlich Recht.
Es gibt noch die GitTools GitVersion mit GitTools.MSBuild Paket da funktioniert theoretisch die Versionierung auch lokal.

Wenn gewünscht kann ich davon meine Konfiguration mal posten?

Grüße
Matthias

Thema: Versionierung mit GitVersion + GitversionTask deprecated
Am im Forum: Rund um die Programmierung

Hallo zusammen,

bis jetzt haben wir GitVersionTask zur Versionierung unserer Anwendungen mit Git Tags verwendet.
Dieses ist jedoch nun deprecated.

Habt ihr andere Ansätze zur Versionierung der Anwendung und auch der Assembly-Versions mit Git Tags?

Vielen Dank im Voraus!

Thema: Wie kann ich alle launchSettings.json im .gitignore angeben/im git ignorieren?
Am im Forum: Rund um die Programmierung

Hallo Abt,

auch bei uns ist das "gewachsen" - jetzt weiß ich ja, dass wir das besser machen können.
Kann man ein Environment File auch so anfügen ohne Docker?

Thema: Wie kann ich alle launchSettings.json im .gitignore angeben/im git ignorieren?
Am im Forum: Rund um die Programmierung

Hallo Abt,

wenn man es liest klingts natürlich logisch, danke!

Ich weiß, jedoch sind für Container teilweise Passwörter für Umgebungsvariablen drin.
Macht natürlich keinen Sinn diese mit einzuchecken ;) und bevor es jemand mal manuell vergisst ...

Grüße
Matthias

Thema: Wie kann ich alle launchSettings.json im .gitignore angeben/im git ignorieren?
Am im Forum: Rund um die Programmierung

Hallo zusammen,

ich schaffe es nicht, in meiner Solution alle launchSettings.json dateien zu excluden.
Mit "**/launchSettings.json" hab ich es schon versucht - hat jemand eine Idee?

Vielen Dank!

Thema: Azure DevOps - gemischte Solution (.net Core + .net Framework)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo zusammen,

ich habe eine gemischte Solution mit .net Standard shared libraries und einer .net Core Server-Anwendung + .net Framework WPF Client.

Beim build lokal in VS 2019 funktioniert alles problemlos - wenn das ganze auf dem Server kompiliert werden soll fehler immer Pakete etc..

Gibt es etwas spezielles für diesen Fall zu beachten? Muss ich nuget restore und dotnet restore ausführen?

Ich hoffe mir kann jemand weiter helfen. Vielen Dank!

Thema: .NET Core 2.2 in Alpine Docker Image -> Alle Anfragen Status 200 mit content-length 0
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

So ich habe nun (so wie es auf den ersten Blick aussieht) mein Problem lösen können:

Meine Controlelr befinden sich zusammen mit der Startup.cs in einer anderen Assembly.
Unter Windows funktionierte folgender Code:


services.AddMvc();

unter Linux muss man den Code folgendermaßen erweitern damit die Controller der anderen Assembly aufgerufen werden:


services.AddMvc().AddApplicationPart(typeof(ClientsController).Assembly);

Thema: .NET Core 2.2 in Alpine Docker Image -> Alle Anfragen Status 200 mit content-length 0
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

Hallo zusammen,

ich habe eine .net Core 2.2 Console Anwendung in einem Alpine Docker Container laufen.
Bei mir lokal funktioniert die Anwendung einwandfrei, wird diese allerdings im Container ausgeführt, so werden alle Requests mit Status 200 und content-lenght 0 beantwortet.
Die Requests stehen sogar in den Container Logs (Kestrel).

Hat jemand schon einmal dieses Problem gehabt oder eine Lösung dafür?

Vielen Dank im Voraus!

EDIT: Hab es entsprechend dem DockerFile auch mal auf einem Ubuntu mit installiertem .net Core compiliert - selbes Ergebnis. Habe ich einen Fehler im Build-Prozess?:

Zitat
#FROM mcr.microsoft.com/dotnet/core/runtime:2.2-alpine as base
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine as base
WORKDIR /app
EXPOSE 11007


FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine as builder

COPY . /app
WORKDIR /app/Common
RUN ["dotnet", "restore"]

WORKDIR /app/DataAccess
RUN ["dotnet", "restore"]

WORKDIR /app/ERPSystem
RUN ["dotnet", "restore"]

WORKDIR /app/GlobalLibrary
RUN ["dotnet", "restore"]

WORKDIR /app/Hoster
RUN ["dotnet", "restore"]

WORKDIR /app/Model
RUN ["dotnet", "restore"]

WORKDIR /app/Service
RUN ["dotnet", "restore"]

WORKDIR /app/Hoster
#RUN ["dotnet", "build"]
RUN dotnet build -c Debug -o /result

FROM builder AS publish
RUN dotnet publish -c Debug -o /result


FROM base AS final
COPY ["settings.json", "/usr/share"]
WORKDIR /app
COPY --from=publish /result .

ENTRYPOINT ["dotnet", "Hoster.dll"]


EDIT:
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]


      User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.


info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[58]


      Creating key {58e5ff23-4d49-4a39-8e67-118d1bcdb07c} with creation date 2019-03-15 10:27:43Z, activation date 2019-03-15 10:27:43Z, and expiration date 2019-06-13 10:27:43Z.


warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]


      No XML encryptor configured. Key {58e5ff23-4d49-4a39-8e67-118d1bcdb07c} may be persisted to storage in unencrypted form.


info: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[39]


      Writing data to file '/root/.aspnet/DataProtection-Keys/key-58e5ff23-4d49-4a39-8e67-118d1bcdb07c.xml'.


warn: Microsoft.AspNetCore.Server.Kestrel[0]


      Overriding address(es) 'http://+:80'. Binding to endpoints defined in UseKestrel() instead.


Hosting environment: Production


Content root path: /app


Now listening on: http://0.0.0.0:11007


Application started. Press Ctrl+C to shut down.


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]


      Request starting HTTP/1.0 GET http://sdk.service.consul:11007/api/clients  


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]


      Request finished in 278.3978ms 200 


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]


      Request starting HTTP/1.1 GET http://localhost:11007/api/clients  


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]


      Request finished in 0.6902ms 200 


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]


      Request starting HTTP/1.1 GET http://172.16.3.0:11007/api/clients  


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]


      Request finished in 0.6707ms 200 


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]


      Request starting HTTP/1.1 GET http://172.16.3.0:11007/favicon.ico  


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]


      Request finished in 0.1266ms 200 


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]


      Request starting HTTP/1.1 GET http://172.16.3.0:11007/api/clients  


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]


      Request finished in 0.225ms 200 


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]


      Request starting HTTP/1.1 GET http://172.16.3.0:11007/favicon.ico  


info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]


      Request finished in 0.3618ms 200 

Thema: Angular Kendo UI sample Dashboard / Admin
Am im Forum: Web-Technologien

Hallo zusammen,

kennt jemand von Euch etwas ähnliches wie adminlte nur eben für Angular mit den Kendo UI controls?

Das würde halt einiges an Aufwand sparen - darf auch etwas kosten.

Vielen Dank!

Thema: Offline App - Distributed State
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

Hallo zusammen,

ich hatte das denke ich etwas unverständlich geschrieben - wir wollen selbstverständlich die vorhandene REST-API für den Sync verwenden.
Wie du sagtest wäre alles andere ein grober Fehler noch dazu mit der Datenbank.

Zum Zwischenspeichern der Daten dachten wir an WebStorage.

Alles klar - dachte schon, dass es da kein fertiges Konzept gibt dann werden wir das auch selbst implementieren.

Vielen Dank!

Thema: Offline App - Distributed State
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

Ok Abt, darf ich fragen welche DBs / sync mechanisem du in Verwendung hattest oder empfehlen würdest?

Mir ist klar, dass das immer sehr stark von der Logik abhängig ist aber in der sync Schicht gibt es doch bestimmt fertige Frameworks?

Thema: Offline App - Distributed State
Am im Forum: Cross Platform Entwicklung - Mobile und IoT

Hallo zusammen,

wir haben vor Jahren eine Anwendung mit ASP.NET WebApi als Dienst und einer WPF Clientanwendung entwickelt.
Nun haben wir alle Abhängigkeiten und Technologien auf den aktuellen Stand gebracht.
Die weitere Planung sieht die Erstellung einer App auf Angular Basis mit Offline-Sync vor.

Nun zu meiner Frage:
Hat jemand von Euch schon eine größere Business-Anwendung Offline-fähig programmiert?
Gibt es bereits Technologien zum mergen auf unserer vorhandenen Basis?

Thema: haproxy dynamic ACL
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Abt,

ja nginx hab ich auch auf meiner Testliste :)
haproxy bietet bezüglich Statistik und Auswertung nur viel mehr Möglichkeiten, deshalb wollte ich es mal damit probieren.

Ich schau mal und werde dann evtl. eine Anleitung hier posten.

Thema: haproxy dynamic ACL
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo zusammen,

ich bin mir nicht 100%ig sicher ob diese Frage hier rein passt und ob sich jemand damit auskennt - ich habe folgende Problemstellung:

- Meine Dockercontainer registrieren sich im Netzwerk über DHCP mit Hostname.app.internal
- Als Proxy verwende ich haproxy (http://www.haproxy.org)

Nun möchte ich dynamisch alle Anfragen die den haproxy erreichen, dynamisch und ohne für jede Container manuell einen Eintrag zu machen, folgendermaßen an die Container (mittels DNS Auflösung) weiterleiten lassen:
www.test.com/demo1 -> demo1.app.internalwww.test.com/xyz -> xyz.app.internalwww.test.com/test -> test.app.internal
usw.

Hat jemand eine Idee wie das mit haproxy geht oder einen anderen / besseren Ansatz?

Vielen Dank!

Thema: Trotz Abfangen von MouseDoubleClick-Event (Telerik RadGridView) wird Klick zweimal ausgeführt
Am im Forum: GUI: WPF und XAML

Habs oben mal dazu editiert - sorry.

Thema: Trotz Abfangen von MouseDoubleClick-Event (Telerik RadGridView) wird Klick zweimal ausgeführt
Am im Forum: GUI: WPF und XAML

Hallo p!lle,

anscheinend passiert das aber egal bei welchem Control ich einen Doppelklick tätige.
Der zweite Klick wird immer in das neue Fenster mit übertragen.

Die Fenster öffne ich folgendermaßen (Beispiel):


<Gridex:RadGridViewEx x:Name="radGridView" ItemsSource="{Binding ItemList}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseDoubleClick" >
                    <i:InvokeCommandAction Command="{Binding EditCommand}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
            <telerik:RadGridView.Columns>
                <telerik:GridViewDataColumn  UniqueName="Number" DataMemberBinding="{Binding Number}" Header="Nr.">
                    <telerik:GridViewDataColumn.AggregateFunctions>
                        <telerik:CountFunction Caption="Anzahl: " />
                    </telerik:GridViewDataColumn.AggregateFunctions>
                </telerik:GridViewDataColumn>
                
        </Gridex:RadGridViewEx>



            CustomerTabViewModel vm = new Customers.CustomerTabViewModel(customer);
            var vw = new CompositionTabView(vm);
            ModalDialogService.Service.Show(vw, vm);

 public class ModalDialogService : IModalDialogService
    {
        protected ModalDialogService() { }

        private static IModalDialogService _Service = null;
        public static IModalDialogService Service
        {
            get
            {
                if (_Service == null)
                    _Service = new ModalDialogService();
                return _Service;
            }
        }

        public void ShowDialog<TDialogViewModel>(IModalWindow view, TDialogViewModel viewModel, Action<TDialogViewModel> onDialogClose)
        {
            view.DataContext = viewModel;
            if (onDialogClose != null)
            {
                view.Closed += (sender, e) => onDialogClose(viewModel);
            }
            view.ShowDialog();
        }

        public void ShowDialog<TDialogViewModel>(IModalWindow view, TDialogViewModel viewModel)
        {
            this.ShowDialog(view, viewModel, null);
        }

        public void Show<TDialogViewModel>(IModalWindow view, TDialogViewModel viewModel, Action<TDialogViewModel> onDialogClose)
        {
            view.DataContext = viewModel;
            if (onDialogClose != null)
            {
                view.Closed += (sender, e) => onDialogClose(viewModel);
            }
            view.Show();
        }

        public void Show<TDialogViewModel>(IModalWindow view, TDialogViewModel viewModel)
        {
            this.Show(view, viewModel, null);
        }
    }

Thema: Trotz Abfangen von MouseDoubleClick-Event (Telerik RadGridView) wird Klick zweimal ausgeführt
Am im Forum: GUI: WPF und XAML

Hallo p!lle,

ich habe soeben eines der Grids durch das Standard WPF DataGrid ausgetauscht.
Am Verhalten hat sich leider nichts geändert :(

Thema: Trotz Abfangen von MouseDoubleClick-Event (Telerik RadGridView) wird Klick zweimal ausgeführt
Am im Forum: GUI: WPF und XAML

Hallo zusammen,

ich fange über Interaction.Triggers die MouseDoubleClick Events eines GridViews (Telerik RadGridView) ab und öffne dann das Detail / Bearbeitungsfenster des Eintrages.
(In etwa wie eine E-Mail in Outlook)


<i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseDoubleClick" >
                    <i:InvokeCommandAction Command="{Binding EditCommand}" />
                </i:EventTrigger>
</i:Interaction.Triggers>

Leider wird trotzdem ein weiterer Klick "ausgeführt" der dann im Bearbeitungsfenster einen Klick ausführt oder das Fenster in den Hintergrund geraten lässt.

Kann ich dieses Verhalten in irgendeiner Weise unterbinden?

Thema: PowerBI + RestApi + Eigene Header Authentifizierung
Am im Forum: Rund um die Programmierung

Hallo Abt,

ich verwende PowerBi Desktop - gilt dies dann auch für die Authentifizierung an der Datenquelle?

Für meinen Test habe ich einfach "Web" als Datenquelle ausgewählt und die URL eingegeben.http://localhost/api/testentries

Kann ich nicht z.B. einen eigenen Eintrag hinzufügen wie es z.B. Zendesk hat etc.?

EDIT: Seit der neusten Version kann ich zwar Header mitgeben - ich kann allerdings nicht durch einen Authentifizierungsprozess den Token erzeugen und dann mitgeben.

Kann ich nicht PowerBi aus meiner Anwendung starten und evtl. den aktuellen Token setzen?

Thema: PowerBI + RestApi + Eigene Header Authentifizierung
Am im Forum: Rund um die Programmierung

Hallo zusammen,

ich möchte mit PowerBi auf Daten einer unserer Anwendung zugreifen können.
Die Dienst stellt Rest Apis zur Verfügung (JSON).

Wie ich Daten über Rest in PowerBi abrufe weiß ich, jedoch erfolgt die Authentifizierung beim Dienst folgendermaßen:

- Benutzer + Kennwort per Post-Methode => Zurückgegeben wird ein Session Token.
- Um auf die geschützten Daten zuzugreifen muss das Session Token in einem Header mitgegeben werden.

Hat jemand von Euch genug Erfahrung mit PowerBi und kann mir bitte sagen ob und wie dieses Problem gelöst werden kann?

Vielen Dank!

Thema: Vermeidung von Leerzeilen beim Parsen von Texttemplate mit C# & Handlebars
Am im Forum: Rund um die Programmierung

@p!ille: Ich habs versucht und jetzt kommt das richtige Ergebnis raus:

Ticketnummer: TI10019
Leistungsdatum / Zeitraum: 21.10.2014 bis
Eingangsform: telefonisch
Kontaktperson: asfdasdf
Beschreibung:
cxdssdf

Vielen herzlichen Dank!

Thema: Vermeidung von Leerzeilen beim Parsen von Texttemplate mit C# & Handlebars
Am im Forum: Rund um die Programmierung

Entschuldige bitte da hast du natürlich recht:


                                                var templateValues = new
                                                {
                                                    Number = st.Number,
                                                    StartDate = st.DateOfOrder.HasValue ? st.DateOfOrder.Value.Date.ToShortDateString() : null,
                                                    EndDate = st.DateOfFinish.HasValue ? st.DateOfFinish.Value.Date.ToShortDateString() : null,

                                                    OrderType = st.OrderType != null ? st.OrderType.Name : null,
                                                    Text = st.Shipment_Text,
                                                    ContactPerson = st.ContactPerson != null ? st.ContactPerson.DisplayName : null,
                                                    Orderer = st.Orderer != null ? st.Orderer.DisplayName : null,
                                                    StatementTime = st.StatementTime.TotalHours,

                                                    Employee_Salutation = st.Employee != null && st.Employee.Salutation != null ? st.Employee.Salutation.Name : null,
                                                    Employee_FirstName = st.Employee != null ? st.Employee.Firstname : null,
                                                    Employee_LastName = st.Employee != null ? st.Employee.Lastname : null,
                                                };

var templateLine = Handlebars.Compile(template.TemplateText);
var result = templateLine(templateValues);

Template:
Ticketnummer: {{{Number}}}
Leistungsdatum / Zeitraum: {{{StartDate}}} bis {{{EndDate}}}{{{#if Orderer}}}\r\nBesteller: {{{Orderer}}}{{{/if}}}{{{#if OrderType}}}\r\nEingangsform: {{{OrderType}}}{{{/if}}}{{{#if ContactPerson}}}\r\nKontaktperson: {{{ContactPerson}}}{{{/if}}}
Beschreibung:
{{{Text}}}

Result:
Ticketnummer: TI10019
Leistungsdatum / Zeitraum: 21.10.2014 bis \r\nEingangsform: telefonisch\r\nKontaktperson: asfdasdf
Beschreibung:
cxdssdf