Laden...

Forenbeiträge von syn87 Ingesamt 87 Beiträge

24.02.2011 - 02:07 Uhr

Hallo zusammen,

ich moechte in die Masterpage meiner Web Applikation die Möglichkeit zum Einloggen eines Benutzers einbetten. Wie ich gelesen habe, sind 2 Dinge besonders zu beachten, wenn man Forms-Authentication nutzt.

  1. Protection="All" (oder vergleichbares), um den Authentifizierungscookie zu verschlüsseln.
  2. requireSSL="true", da die Login-Daten standardmäßig in Klartext übertragen werden.

Demnach sollte man zumindest die Login-Seite mit SSL verschlüsseln. Aber was ist nun, wenn ich, wie beschrieben, dem Benutzer auf quasi jeder Seite die Möglichkeit geben möchte, sich einzuloggen. Das ganze resultiert ja in massig Verschlüsselungsoverhead....

Hat jemand eine Idee?

Gruß

syn

07.10.2010 - 22:41 Uhr

Hallo zusammen,

ich krieg grad total die Krise. Gestern ging es noch und heute escaped er das Hochkomma....

TextBox1.Attributes.Add("onChange", "alert('muh');");

Im html steht dann

onChange="alert(& #39 ;muh& #39 ;);" 

(leerzeichen eingefügt)

was natürlich nicht funktioniert 😦 Wieso ging es zur Hölle gestern noch?!!

Gruß

05.10.2010 - 17:47 Uhr

Besten Dank 😃

05.10.2010 - 17:42 Uhr

Alles klar. Danke für die rasche Antwort. Jedoch interessiert mich dann trotzdem einmal, wieviel Indexe überhaupt gesetzt werden. Bei Identity gehe ich schwer davon aus. Wie sieht es bei Fremdschluesseln aus?

Bin ich für die Erstellung eines Indexes auf dieser Seite richtig? Und ist das für Express Datenbanken (also MDF) überhaupt möglich? Beschäftige mich erst seit gestern mit diesem Kram 😃

05.10.2010 - 17:36 Uhr

verwendetes Datenbanksystem: MDF

Hallo zusammen,

momentan modelliere ich meine Datenbank mit Linq To SQL. Im Code hol ich mit den DataContext und erzeuge die Tabellen mit CreateDatabase().

Soweit bin ich damit auch zufrieden. Allerdings möchte ich gern ein spezielles Property (besser eine bestimmte Tabellenspalte) als Index festlegen. Identity ist nicht gewünscht! Meine Vermutung geht dahin, dass ich im Property Fenster irgendetwas bestimmtes bei "Server Data Type" angeben muss... Nur was?! 😃

Gruß

matze

10.08.2010 - 14:00 Uhr

Ich hab Probleme, die EchoCancellation bzw. NoiseSuppression zu aktivieren. Im Netz findet sich immer nur ein Beispiel und derjenige scheint ebenso Probleme zu haben:


captureDescription.ControlEffects = true;
captureDescription.CaptureEffectDescription = new CaptureEffectDescription[1];
captureDescription.CaptureEffectDescription[0].LocateInSoftware = true;
captureDescription.CaptureEffectDescription[0].GuidEffectsClass =
DSoundHelper.CaptureEffectsMsAcousticEchoCancellation;
captureDescription.CaptureEffectDescription[0].GuidEffectsInstance =
DSoundHelper.InterfaceCaptureEffectsAcousticEchoCancellation;

new CaptureBuffer(captureDescription, captureDevice)

Bei der letzten Zeile gibts ne ArgumentException("out of range").

Gruß

04.08.2010 - 18:18 Uhr

Hier hat sich zwar wenig getan, aber ich glaub mein Vorhaben ist ähnlich 😃

Ich habe mehrere Wav Dateien die während einer Audio/Video Konferenz entstanden sind. Aus den Wav Dateien moechte ich nun quasi die Gruppenunterhaltung generieren. Heisst also alle Dateien müssen sich überlappen.

Hat jemand eine Idee oder kennt vllt einen besseren Weg?

Gruß

04.08.2010 - 00:18 Uhr

Ja wie gesagt: 0 wenns nur im LAN versendet werden soll.

03.08.2010 - 19:53 Uhr

ttl bestimmt doch die anzahl der hops. also die anzahl, wie oft ein paket das netzwerk wechseln kann. damit ist 0 gleichbedeutend mit einem lan?! ich glaub das war so 😃

03.08.2010 - 19:15 Uhr

Hallo zusammen 😃

ich schätze ein paar Fehler habe ich nun schon eliminiert. Zumindest läuft es auf einigen Rechnen nun trotz Multicast flüssig. Hier scheint auch das Problem gewesen zu sein, dass ich eine falsche Multicast Adresse verwendet hab. Meine Annahme war, dass es egal ist, welche ich nehme, aber anscheinend gibt es da doch ein paar gravierende Unterschiede (Multicast Address Assignment). Weiterhin übergebe ich nun auch die TTL an die JoinMulticastMethode (aktuell 0).

Wie gesagt, es funktioniert mit einigen Rechnern. Manche Rechner bekommen nur fuer 2 Sekunden die Signale von den anderen Rechnern, und danach nie wieder. Ne Idee woran das liegen kann?

Gruß

syn

29.07.2010 - 23:16 Uhr

hehe:) ne also ich habs nur lokal getestet. nur da funktionieten ja die multicast ips. jetz weiss ich nich genau wie das mit den multicast funktioniert. wird nur ein paket geschickt und jeder der in der gruppe ist, fuehlt sich angesprochen? oder werden eigntl doch so viel pakete versendet, wie nutzer in der gruppe sind?

ich will nochmal betonen: jeder client schickt sein bild zum anfang nur an der server. sobald die serverip gegen eine multicast ip ausgetauscht wird, kommt es zu paketverlusten...

gruss

29.07.2010 - 16:12 Uhr

Hallo zusammen,

ich bin aktuell dabei, ein Videokonferenz Programm zu schreiben. Dabei gibt es verschiedene Clients, die sich, sobald sie sich am Server angemeldet haben, diesem ein Bild schicken. Die Übertragungsrate liegt zu Beginn bei 25 Fps. Die Bilder kommen beim Server auch sauber und ruckelfrei an.

Nun das Problem: Damit sich die Clients untereinander sehen, wollte ich MulticastGroups verwenden. Kommt ein Client also in eine Gruppe, dann sendet er nicht mehr an die ServerIP sondern an die gruppenIP. Der Server empfaengt sie jedoch trotzdem noch, da er auch in allen Gruppen mit drin steckt. Sobald zu viele Clients nicht mehr an die ServerIP senden, sondern an die Gruppen IP, kommt es zu aussetzern. Wenn ich die Empfangsroutine genauer unter die Lupe nehme, dann kann ich auch feststellen, dass von manchen Clients schon seit Sekunden ncihts mehr empfangen wird. Daher schließe ich ein GUI Problem aus.

Also nun die Frage: Kommt es bei der Nutzung von Multicast Gruppen irgendwann zwangslaeufig zu Problemen? Sollte ich vllt an jeden einzelnen Client in der selben Gruppe senden? Und sollte ich vllt auch mehrere Ports verwenden, statt nur einen?

Lg

28.07.2010 - 17:58 Uhr

Hallo zusammen.

ich bastel grad an einem konferenz tool bei dem man alle in der selben befindlichen Nutzer sehen können soll. Soweit funktionert das ganze auch schon sehr gut... Nur wird es etwas problematisch, wenn ich entweder die fps hoeher setze, oder es mehr als 4 Nutzer werden. Der Netzwerkteil dürfte meines Erachtens nach keine probleme darstellen, da ich den Soundkram bereits fertig habe, und die Netzwerklast dort wesentlich höher war.

Mein Gefühl sagt mir, dass es irgendwas mit der GUI zu tun hat. Die ankommenden Pakete werden wie folgt verarbeitet:


listener = new Listener(1551, delegate(IPAddress from, byte[] raw)
{
Client client = null;
if (!clients.TryGetValue(from, out client))
 return;

MemoryStream m = new MemoryStream(raw);
client.Camera.Image = new Bitmap(m);
};

Camera ist eine PictureBox... diese wird in einem anderen Thread als die GUI erstellt, später dann aber zu dieser hinzugefügt (invoke noetig?)... der listener startet einen neuen Thread, in welchem auf ankommende Pakete gewartet wird. kommt ein paket an, wird die callback-Methode (delegate) aufgerufen (muss hier vllt fuer das setzen des Image ein Invoke her?).

2 Knackpunkte hab ich nun bereits genannt. Eine weitere Möglichkeit wuerde eventuell darin bestehen, dass ich die GUI multithreaded gestalte. d.h. also ein zusaetzliches programm erzeuge, welches kein formborder hat und welches nur ein videosignal verarbeitet. Wie auch immer, bin auf die antworten gespannt.

gruß

syn

26.12.2009 - 20:35 Uhr

Packt man das ganze in eine DLL sind bereits zahlreiche AssemblyLoad Events gefeuert wurden. D.h. man sieht im Splashscreen nicht alle geladenen Assemblys. Es gibt natuerlich auch die Liste geladener Assemblies, aber ich wollte es halt genau in dem moment anzeigen, wo es auch geschieht.. Bei einer Applikation die aus mehreren DLLs besteht ist diese Variante für mich wesentlich angenehmer als immer SetText("Assembly xy") zu schreiben, hatte ich ja bereits geschrieben.

26.12.2009 - 17:49 Uhr

Okay wird gemacht. Sonst noch irgendwelche Einwände?:) Was mich etwas stoert, ist dass der Prozess als SplashScreen.exe weiterlaeuft, aber ich glaube das ist nicht zu verhindern oder? Ansonsten muesste ich ja einen neuen Process starten und dann haette ich wieder das Problem mit dem AssemblyLoad.

26.12.2009 - 17:35 Uhr

Kaum zu glauben, aber ich hab schonmal eine Moeglichkeit gefunden, mit der es funktioniert:


        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new SplashScreen());

        }

        public SplashScreen()
        {
            InitializeComponent();
            Thread mainApp = new Thread(delegate()
            {
                AppDomain mainAppDomain = AppDomain.CreateDomain("MainApp");
                mainAppDomain.AssemblyLoad += (s, e) => { };
                //MessageBox.Show(e.LoadedAssembly.GetName().Name);
                Mutex mut = new Mutex(true, "LOCAL//Client");
                mainAppDomain.ExecuteAssembly("Client.exe");
            });

            Shown += (s, e) =>
            {
                mainApp.Start();
                Thread.Sleep(2000);
                Mutex mut = new Mutex(false, "LOCAL//Client");
                mut.WaitOne();
                Close();
            };
        }

Ich möchte aber trotzdem noch die Frage an euch richten, was ihr fuer verbesserungswuerdig haltet.

LG

26.12.2009 - 16:22 Uhr

Hallo zusammen,

ja ich hab schon ein bisschen im Forum rumgeguckt, aber ich glaube meine Idee für einen SplashScreen ist noch nicht vertreten.

Ich würde den SplashScreen gern als einzelne Exe kompilieren und ihm dann das zu startende Programm und das SplashBild als Parameter übergeben.

Beim Start der SplashScreen-Exe sollte dann eine neue

AppDomain

erstellt werden. Über diese kann man an das Event

AssemblyLoad

anknüpfen.

Ja sicherlich is das eine Geschmacksfrage, aber ich find es ziemlich 'stylisch' wenn da die geladenen Assemblys angezeigt werden 😃

Problem bereitet mir aber das Beenden des SplashScreen Programms. Hier sollte eigntl die SplashScreen Assembly als Referenz zum Zielprojekt angegeben werden können, und der SplashScreen per SplashScreen.Close() beendet werden können. Ich hab schon viel probiert, aber nichts hat wirklich funktioniert. Process IDs sind gleich und den Thread über die ManagedThreadID bekomm ich nich (zumindest weiss ich nicht wie). Frage bleibt also, wie sollte das Close() aussehn.

Ja für Ideen bin ich offen 😃


            SplashScreen splash = new SplashScreen();
            new Thread(delegate()
            {
                AppDomain mainAppDomain = AppDomain.CreateDomain("MainApp");
                mainAppDomain.AssemblyLoad += (s, e) => { };
                //MessageBox.Show(e.LoadedAssembly.GetName().Name);
                mainAppDomain.ExecuteAssembly(args[0]);
            }).Start();

09.11.2009 - 15:27 Uhr

@ujr:

An den Sonnenwinden?

Witzig.


>
Punkt 5

Siehe:

Jedoch bekomm ich im eigenen Projekt keine Meldungen über diverse Events.

Vllt hilft dir das:
http://www.google.de/search?q=wie+lese+ich+richtig

@Joetempes:
Danke. Werde es gleich mal ausprobieren. Inzwischen hab ich vom Hersteller erfahren, dass man erst noch den Buchstaben 's' senden muss. (In der Anleitung stand davon leider nichts 😃)

LG

09.11.2009 - 11:55 Uhr

Hallo zusammen,

ich hab hier seit ein paar Tagen ein Set aus 2 Handschuhen, die per Bluetooth Informationen über den Biegegrad der Finger an einen Empfänger senden. Hier ist zu bemerken, dass die Daten erst noch auf einen COM-Port gemappt werden.

Das beiliegende Testprogramm läuft problemlos. Ich muss nur den Namen des Ports angeben, und schon trackt er die empfangen Daten. Das Programm sieht nebenbei gesagt stark nach C# aus.
Für mein eigenes Projekt habe ich einfach eine SerialPort-Instanz verwendet. Soweit sollte das auch alles klappen, denn sobald serialPort.Open() ausgeführt wurde, kann ich das benannte Testprogramm (also das vom Hersteller) nicht mehr starten "COM port unavailable" oder so... Jedoch bekomm ich im eigenen Projekt keine Meldungen über diverse Events. Woran kann das liegen?

LG syn

04.08.2009 - 21:24 Uhr

Ich denke auch das wird das Vernuenftigste sein. Zumindest wenn man noch auf bestimmte Features von Remoting angewiesen ist, wie z.b. dem CallContext. Läuft ja nich weg 😃

04.08.2009 - 00:25 Uhr

Nur wäre man dann wieder bei dem Punkt, an dem man in jedem Methodenaufruf seine Session packen muss. Also ist sicher beides nicht so ganz optimal. Da überleg ich doch glatt wieder, ob ich WCF nicht sein lasse und doch Remoting verwende :\

04.08.2009 - 00:00 Uhr

Im ernst? 😃 Na dann kann man ja immernoch intern den Principal weitergeben. Jedenfalls werd ich das denke mal genau so implementieren. Für ein mittelständisches Unternehmen reichts. Vllt wirds dann spaeter nochmal geaendert.

LG

03.08.2009 - 23:19 Uhr

Es wuerde in dem Sinne keinen Sitzungsschluessel geben, man müsste immer erst den Principal aufrufen.
Das mit der permanent Last stimmt natürlich. Wobei ich dem gegenüber jetzt behaupten würde, dass da nich wirklich viel "Last" über die Leitung geschoben wird.

LG

03.08.2009 - 23:03 Uhr

Nunja. Es würde ebenso wie bei dir auf einem SecurityService basieren. Dieser stellt folgende Methoden bereit:


// gibt TRUE wenn Login erfolgreich, sonst FALSE (wenn Principal bereits Session hat)
bool Login(GUID guid);

// ist in der Lage eine bestehende Session zu überschreiben, TRUE wenn erfolgreich
bool ForceLogin(GUID guid);

// frischt TimeStamp auf (Timeout für Locking Items)
// TRUE alles is in Ordnung
// FALSE aktuelle Session wurde überschrieben
bool Renew(GUID guid);

// löscht Session Items
void Logoff(GUID guid);

Nun ein kleines Beispiel 😃 Es geht dabei um einen Rechner mit einem bestimmten Nutzer, welcher an einer Domain angemeldet ist.

  • Startet Instanz (A) -> Login

  • Stetiges Renew (Timer) und normales Arbeiten

  • Startet Instanz (B) -> Login
    -> returns FALSE

  • Vorhandene Session überschreiben? (MessageBox)

    • Ja -> ForceLogin
    • Nein -> App Close
  • Login erklaert sich von alleine 😃

LG

03.08.2009 - 21:51 Uhr

Ist immer wieder interessant deine Beiträge zu lesen 😃 Wie lang programmierst du schon .NET und wie hast du dir das alles angeeignet?

Zum Session Kram hier noch eine Idee von mir. Ich beschreib das wieder in gewohnter Stichpunkt Form. Vllt hat ja jemand n Kommentar oder Kritik dazu.

  • Client generiert GUID
  • Login-Versuch, true = Success, false => 5 neue Versuche, danach Meldung "Andere Session aktiv. Übernehmen?" -> Sprich die Session für eine andere AppInstanz wird verworfen.
  • Stetiges RenewSession() mit der GUID um alle assoziierten Daten zu halten. Z.b. gelockte Items
  • Bei Timeout -> Free Locked Items
  • Beim Schließen Logout mit GUID -> Alle Daten auf dem Server zerstören

Auf diesem Weg würde das Mitsenden der SessionID bei allen Methoden erspart bleiben, da pro Benutzer eh nur eine AppInstanz erlaubt ist. Für eine MDI Applikation duerfte das ja kein Problem sein.

LG und danke schonmal für die vielen informativen Posts 😃

03.08.2009 - 10:17 Uhr

Den ServiceSecurityContext benutze ich bereits - Erfolgreich. Grund für mich einen CallContext zu verwenden ist der, dass ich wie bereits erwähnt eine Session erstellen kann. Ich orientiere mich dabei sehr am Beispiel von Rainbird - ist für mich auch irgendwie schlüssig.
Dazu gehört unter anderem der LockingService. Dieser muss ja zwangsweise auf einer SessionId basieren, die vom Server kommt. Der ServiceSecurityContext wuerde dafuer nicht genuegen, da z.b. im Falle eines Programmabsturzes ein Element ewig gelockt bleiben würde. Genauer Mechanismus wäre dabei wie folgt:

  • LockingAnforderung<Customer>(CustomerId)
  • Per Timer stetig die Session Renew'en
  • Server verlängert Locking

Bei einem gecrashten App wäre dann die Ressource nicht mehr offen aber dennoch geblockt. Ähnliches könnte man z.b. über die Login Methode beseitigen (indem man alle Lockings löscht), aber ich weiss nicht so recht, ob das ein guter Weg ist. Was meint ihr? (Ist mir naemlich grad erst eingefallen 😃

LG

03.08.2009 - 01:11 Uhr

Hallo ihr beiden,

danke für die beiden Antworten, vor allem Rainbird für den doch ziemlich langen Post 😃 An sich sollte meine Frage aber auf etwas anderes zielen. Ich habe mich bereits für das NetTcpBinding entschieden, da es in der Tat eine Anwendung sein soll, die mittels Client und Server über das Netzwerk kommuniziert. An den Principal komm ich mittlerweile auch ran. Was ich mich aber immernoch frage ist, wie kann ich ContextDaten setzen. Also ähnlich wie beim .NET Remoting mit CallContext.SetLogicalData usw.. Ich geh davon aus dass ich weiterhin das NetTcpContextBinding nutzen muss. Richtig?

@Rainbird:

Dein Applikationsserver ist nach wie vor ein schönes Beispiel um einen Einstieg in den ganzen Remoting Kram zu bekommen. Hat mir wirklich sehr geholfen! Danke an dieser Stelle dafür. Allerdings stell ich mir mittlerweile auch ein paar Fragen, warum du was wie gemacht hast. Einige davon wären:

  • Warum sind Funktionen wie Login, Logoff, RenewSession usw. in der API (BasisContract)? Sollte die konkrete Implementierung nicht beim Server liegen? (Ist letztendlich wahrscheinlich egal, aber ich habs mich trotzdem gefragt 😃

-Wenn es um den SecurityService geht. Könnte man nicht alle Funktionen innerhalb des Servers auf eine static class umleiten? Ich stell mir das quasi so vor, dass es einen SecurityService gibt der nur die Funktionen Login, Renew und Logoff hat. Diese leiten innerhalb des servers dann auf Server.Login/Renew/Logoff um. Dieser "Singleton" kann dann die Sessions verwalten und gibt den anderen Diensten die möglichkeit, per IsInRole(...) einzelne Rechte abzufragen. Wäre das so prinzipiell auch möglich, oder hab ich bei deinem AppServer nur was falsch verstanden?

Liebe Grüße

--------------------------------------- EDIT ----------------------------------------------
Hier ein kleiner Zwischenstand (da ich trotz des Forums versuche, meine Probleme selber zu loesen):

Soweit ich gelesen hab, muesste ich IClientMessageInspector und IDispatchMessageInspector verwenden. Mir erscheint das jedoch etwas viel Aufwand. Alles was ich benötige ist eigntl, dass der Server ein paar Daten einspeisen kann, und zum späteren Zeitpunkt darauf zugreifen kann. Nach Möglichkeit über alle zwischen Client udn Server bestehende Dienste.

Ein kleines Szenario wäre also:

  • Client: Login (SecurityService)
  • Server: erstellt GUID für Client und hängt diese in den Context
  • Client: GetCustomers (CustomerService)
  • Server: kann auf Context zugreifen, erkennt GUID usw.

LG und danke an jeden der so viel liest 😃

01.08.2009 - 17:50 Uhr

Hallo zusamm,

seit einigen Tagen beschäftige ich mich jetzt mit WCF und muss sagen, vom Funktionsumfang ist das ganze ja noch n Tick schlimmer als .NET Remoting. Was ich damit sagen will ist, dass ich mittlerweile garnicht mehr weiß, was ich alles gelesen hab, und was davon wichtig für mich ist.

Aus diesem Grund wollte ich euch gesammelt mal Fragen, welche Dokumentationen ihr für meinen konkreten Fall empfehlen könnt:

  • Context Unterstützung
  • Authorisierung über Windows Account

Beiläufig stell ich mir momentan immer noch die Frage (da ich noch nicht soweit bin), wie ich meine Anwendung denn testen kann. Es sollte ja selbst für Debug auf 2 Betriebssystemen laufen, oder wuerde vllt auch eins reichen? Wobei ich mir dann die Frage stelle, wie ich rausbekomme, dass er die Identität vom Aufrufer nimmt, oder die eigene. Ist ja dann die selbe?!

LG

31.07.2009 - 23:55 Uhr

Das Original entstammt meinerseits von CodeKeep. Demnach auch nicht wirklich eine Referenz wert 😉

LG

31.07.2009 - 22:52 Uhr

Gutn Abend zusammen 😃

jeder kennt wahrscheinlich eine Methode ähnlich der Folgenden:


void SetProperty(string propertyName, ref int backing, int value)
{ ... }

Ich bin hier mal auf etwas gestoßen, was den MagicString kram umgeht:


 #region INotifyPropertyChanged Members   ...
2
3
4        [field:NonSerialized()]
5        public event PropertyChangedEventHandler PropertyChanged;
6
7        private void OnPropertyChanged(Expression<Func<object>> exp)
8        {
9            MemberExpression me = exp.Body as MemberExpression;
10
11            if (me == null)
12            {
13                me = ((UnaryExpression)exp.Body).Operand as MemberExpression;
14            }
15
16         
17            string propertyName = me.Member.Name;
18            OnPropertyChanged(propertyName);
19
20        }
21        private void OnPropertyChanged(string propName)
22        {
23            if (PropertyChanged != null)
24                PropertyChanged(this, new PropertyChangedEventArgs(propName));
25        }
26        #endregion

Vllt hat ja noch jemand Verbesserungsvorschläge.

LG

31.07.2009 - 19:11 Uhr

Hallo,

das hab ich schon gemacht. Aber bei der Auswahl eines Images seh ich trotzdem nichts.

LG

31.07.2009 - 18:50 Uhr

Hallo 😃

ich habe ein Projekt welches mir Basisklassen zur Verfügung stellt, ebenso wie eine Sammlung von Icons/Images. Nun habe ich ein zweites Projekt mit Referenz zum ersten. Wie kann ich nun z.b. Images vom ersten Projekt in einer Form des zweiten Projekts verwenden? Nach Möglichkeit über den Designer.

Gruß

31.07.2009 - 17:18 Uhr

Was genau würde in diesem Fall denn zur Konfiguration gehören?

Ps: Eben habe ich meine Projektstruktur nochmal neu angelegt. Ein Windows Forms, ein Class Library und ein Console. Nun hab ich beim Rechtsklick auf App.Config kein "Edit WCF...." mehr. Woran liegt das?:(

31.07.2009 - 16:56 Uhr

Tach und ahoi,

vor kurzem hab ich, nachdem ich mich eingehends mit Remoting beschäftigt habe, den Schritt zur WCF gewagt. Bei der ersten Erstellung einer Server-Client Anwendung bin ich dann aber schon auf einige Probleme gestoßen.

Ich weiß nicht inwiefern die Auswahl eines "WCF Library Project"'s Auswirkungen auf das Projekt hat. Jedenfalls habe ich eine Client Anwendung als Windows Forms Projekt, und 2 WCF Service Library Projekte (Contract und Implementierung) angelegt.

Bei einem Standard WCF Projekt bekommt man ja trotz der DLL Ausgabe beim Starten einen automatisch generierten Proxy. Wie kann ich dieses Verhalten unterbinden? Sprich, wie kann ich meine Solution debuggen? Ich benutze zur Zeit netTcpBindings.

Eine weitere Frage besteht für mich in der späteren Nutzung des Programms. Wie lasse ich den Server letztendlich laufen, wenn er eine DLL ist? Ich glaube ich habe mal was davon gelesen, dass das über ein spezielles Tool getan wird, konnte es aber leider nciht mehr finden.

Hier nochmal kurz meine app.config:


  <system.serviceModel>
    <bindings>
    </bindings>
    <services>
      <service behaviorConfiguration="Sample.Server.SecurityServiceBehavior"
        name="Sample.Server.SecurityService">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="netTcpBindingConfiguration"
          name="SecurityService" contract="Sample.Contract.ISecurityService" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:6060/Sample.Server.SecurityService" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Sample.Server.SecurityServiceBehavior">
          <serviceMetadata httpGetEnabled="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

LG

25.07.2009 - 22:10 Uhr

Genau 😃

Danke für das Beispiel. Dann hat jeder nochmal ein Anhaltspunkt.

25.07.2009 - 20:59 Uhr

Hi specialwork,

ich weiß das wird jetzt nicht sonderlich weiterhelfen, aber Transparenz und WindowsForms kannst du meiner Meinung nach vergessen. Zumindest wenn es um einzelne Controls geht. Da mir das ganze auch irgendwann zu doof geworden ist, habe ich einfach ein neues Form angelegt (Borders etc. ausblenden) und dessen Opacity angepasst. Vllt ist das ja eine Alternative fuer dich.

LG

syn

25.07.2009 - 20:55 Uhr

Hallo an alle 😃

Also ich hab es aufgegeben die Formatierung in das BusinessObject zu packen. Stattdessen sollte man Formatierungen über das [DataBinding].Parse Event auslösen.

Also z.b. textBox.DataBindings["Text"].Parse. Über den EventHandler kann man dann die Value anpassen/formatieren.

Gruß

19.07.2009 - 19:07 Uhr

Hallo ihr beiden,

danke für die schnelle Antwort. Kennt jemand ein gutes Beispiel dafür, wo man ein Nullable<int> also int? einsetzen könnte?

Wie gesagt das obige Beispiel stammt nicht von mir, und ich wüsste auch nicht so recht, wo der Nutzen liegen könnte.

Danke und LG

syn

19.07.2009 - 18:56 Uhr

Hallo zusammen,

ähnlich wie bei Lambda ausdrücken bekommt man durch die Suche nicht wirklich das, was man möchte.

In einem Projekt habe ich das hier gefunden:


        private string _emailAddress;
        private int? _age;

        public string Name {
            get { return _name ?? string.Empty; }
            set { _name = value; }
        }

        public string EmailAddress {
            get { return _emailAddress ?? string.Empty; }
            set { _emailAddress = value; }
        }

        public int? Age {
            get { return _age; }
            set { _age = value; }
        }

Nun die Frage. Wofür stehen Sachen wie int? und _name ?? string.Empty GENAU. Beim zweiten kann ich mir das noch denken, beim ersten eher nicht. Gibt es bei MSDN irgendwo eine Informationen zu derartigen Syntaxen?

LG

18.07.2009 - 23:08 Uhr

Hi,

also dein Beispiel geht bei mir auch. Wenn das allerdings beim verlassen einer TextBox passiert, also beim SetProperty dein value veraendert wird, dann kommts nicht zurueck.

LG

18.07.2009 - 22:10 Uhr

Hallo ihr beiden,

es handelt sich nur um ein Objekt, ein Person Objekt.

Du hast recht. In dem Sinne ist Formatierung etwas weit gefasst. Grundsätzlich soll es darum gehen, dass der Benutzer z.b. nicht auf Groß und Kleinschreibung achten brauch, und demzufolge einfach "hans wurst" eingibt, was dann die BusinessSchicht korrigiert/formatiert. Ein weiterer Punkt sind Telefonnummern. hier soll z.b. 0171 1234 56-98 in folgende überführt werden +49 (0) 171 1234 56 - 98.

In welche Schicht das jetzt genau gehoert ist ja fuer den Sachverhalt egal. Ich wuerde es jedenfalls gerne in die BusinessSchicht packn. Aber hat jetzt jemand eine Idee wie ich das Problem der Aktualisierung löse?

Um es nochmal auf den Punkt zu bringen.

  • ich binde ein Objekt
  • setze eine Eigenschaft per Code (Formatierung)
    -> die GUI aktualisiert nicht (Problem)

LG

18.07.2009 - 21:30 Uhr

Es handelt sich erst einmal nur um eine TextBox welche ich an das Property "Name" binden möchte. Formatierung klappt, nur GUI kriegt nix davon mit, nach wie vor.

Welche Argumente sprechen genau dagegen, die Formatierung innerhalb der BusinessSchicht vorzunehmen? Ich spreche dabei vor allem von Dingen wie "Eigennamen vorne groß, Rest klein" oa.

Gruß

Matze

18.07.2009 - 20:21 Uhr

Naja es dürfte ja egal sein, ob ich den neuen Wert zuerst formatiere und dann auf den Ref schreibe, oder erst setze und dann formatiere.

LG

edit:

Gut, ohne dass ich die Signatur poste, ist das etwas verwirrend:

protected void SetPropertyValue(string propertyName, ref string oldValue, string newValue)

==============================

Ich habe gerade gelesen, dass eine Formatierung in der Business Schicht, wie ich es ja vorhabe, nicht möglich sei, und ich stattdessen innerhalb der GUI formatieren muesste. Kann das jemand bestätigen?

18.07.2009 - 18:36 Uhr

Hallo herbivore,

SetValue macht folgendes:


            if (oldValue != null && oldValue.Equals(newValue)) return;

            OnPropertyChanging(propertyName);

            newValue = Format(newValue, CharacterCasing.Capitalize);

            oldValue = newValue;

            Validate(this.GetType().GetProperty(propertyName));

            OnPropertyChanged(propertyName);

Die Value wird soweit korrekt gesetzt, aber die GUI aktualisiert sich wie gesagt nicht. Gerade hab ich im Dialog fuer ein Binding noch die Möglichkeit gefunden, es auf OnPropertyChanged zu stellen, allerdings ohne Wirkung.

Nur um Mißverstaendnisse zu beseitigen: Ich benutze ein BindingSource mit dem Typ Person als DataSource, und die GUI Elemente binden sich dann an den BindingSource. Ist das so gängig? Früher hatte ich es anders gemacht, ueber [textbox].DataBindings.Add(....), dachte dann aber, dass die andere Variante besser ist.

Gruß

18.07.2009 - 18:01 Uhr

Hallo zusammen,

ich habe ein Objekt der Klasse Person, welches ich an verschiedene GUI Textboxen, etc. per DataBindings binde. Dabei soll die eingabe automatisch formatiert werden. Für ein Property benutze ich daher eine Funktion die ungefaehr so aussieht:

SetValue(ref string oldVal, string newVal, FormatType formatting)

Die FormatTypes umfassen dabei z.b. Uppercase, Lowercase, PhoneNumber etc.

Das Problem ist, dass die GUI vom formatieren nichts mitbekommt und weiterhin der unformatierte Text drin steht. Mach ich irgendetwas falsch?

LG

Matze

30.05.2009 - 04:27 Uhr

Hi,

ich möchte an dieser Stelle auf eine sehr schöne Bibliothek von codeproject.com hinweisen:

http://www.codeproject.com/KB/tree/treeviewadv.aspx

In diesem ist unter anderem das Selektions-Problem gelöst.

Danke aber auch an Isaac 😃

30.05.2009 - 04:20 Uhr

Hi,

vielen dank an euch beide. Das mit dem XSLT zeugs sieht ja ganz gut aus. Nachdem ich mich gestern noch etwas damit beschaeftigt habe, denke ich auch, dass das eine geeignete Methode wäre.

LG

29.05.2009 - 02:22 Uhr

Hallo an alle,

vorne weg, ich kenn mich mit XSLT und dergleichen nicht aus, dh. wenn jemand ein fertiges Snippet für mich hat, wäre das wirklich toll, da ich nicht die Zeit hab, mich in das Thema noch einzuarbeiten.

Nun das Problem: Ich habe einen HTML to XHTML Parser. Dh. mein Outputfile liegt im validen XML-Format vor. Weiterhin möchte ich nun sämtliche <br />, <a>, <u> und andere Formatierungstags entfernen.

Aus


<div>
   <b>Hallo</b><br />
   <a href="next.html">Link</a>
</div>

soll also


<div>
   Hallo
   Link
</div>

werden.

Bin dankbar fuer jede Hilfe 😉

22.05.2009 - 18:02 Uhr

Nein, wie auch. Zur Typdefinition bedarf es sicherlich etwas mehr als dem Namen. Trotzdem danke. Vielleicht hat noch wer ne idee.