Werbung

Ich darf im Moment sehr viel WPF machen. Dazu kann ich entweder Visual Studio 2008 oder Expression Blend 3 nutzen. Beides lässt mich die Wände hoch gehen.

Im Visual Studio 2008 ist der Designer einfach nur schwach und verhält sich bisweilen sehr eigenartig. Aber das ist allseits bekannt. Also versuche ich mich an Expression Blend 3. Ich finde das Teil noch unbrauchbarer als VS.

Wie so?

1. Auf den Tabs gibt es kein Kontextmenü. Kein “Alle schliessen” oder “alle ausser diese schliessen”.

Expression Blend 3 Tabs

2. Ich kann mehrere XAML Dateien selektieren aber nicht miteinander öffnen. Muss alle einzeln doppelklicken. Nicht mal “Enter” geht.

Nur via Kontextmenü und öffnen.

Expression Blend 3 Projektexplorer

3. Code formatieren in Expression Blend 3? Ja wo den? Geht auch nicht? Kein Kontextmenü auf dem XAML Code. Man kann nicht mal Code zusammenklappen. Das können heute ja schon 0815 Editoren.

www.EdelsteinKreationen.ch

Expression Blend 3 Sourcecode

4. Der Codeeditor verhält sich oft anders als der in VS 2008. Wie oft habe ich schon einen Zeilenumbruch gemacht wo ich es nicht wollte.

5. Gewaltig was man in den Optionen alles einstellen kann. Wie stelle ich ein das ich einen schwarzen Hintergrund im Code habe?

Expression Blend 3 Optionen

6. Egal welches Farbschema. Kontrast ist immer schwach.

Expression Blend 3 Kontrast

Ich bin ja auf VS 2010 gespannt. Das Projekt soll dann sofort auf 2010 migriert werden. Das kann ja nur besser werden.

PS: Habe mir schon ein paar mal gewünscht diese Anwendung in WinForm zu machen. Einfach weil dort die Werkzeuge ausgereifter scheinen.

kick it on dotnet-kicks.de

16.02.2010  --  GENiALi  --  75 Wörter

Ofensichtlich habe ich mit meinem Gejammer etwas bewirkt. Auf codekicker.de wird wieder gerechnet.

Ich habe meine Reputation schlagartig mehr als verdoppelt. Aber die andern auch. :-)

Benutzerprofil von GENiALi

Auf dem codekicker blog wurde mir auch für die Unterstützung gedankt. Cool wenn man Gejammer als Unterstützung abtut. Gefällt mir. Aber danke, dass es wieder tut. Das gefällt nicht nur mir. Es gibt noch einige Andere die das gut finden. Hoffentlich zieht die Antwortfreudigkeit auf dem Portal wieder an.

kick it on dotnet-kicks.de

11.02.2010  --  GENiALi  --  177 Wörter

Seit bald einem Monat wird bei codekicker.de die Reputation nicht mehr nachgefahren. Am 19.01.2010 habe ich mal darauf hingewiesen das mit der Reputation etwas nicht mehr stimmt. Ich bekam auch eine Antwort. Der Fehler sei entdeckt und es müsse danach alles einfach neu berechnet werden. Es seinen keine Reputationen verloren gegangen. Wurde es aber noch nicht.

Leider geht auch der Goodwill der Teilnehmer mit der Zeit verloren. Um so länger nicht bewertet wird um so weniger passiert bei codekicker.de.

Wenn die Jungs bei codekicker nicht bald den Fehler beheben wird sich das Projekt tot laufen. Einige die am Anfang sehr tüchtig antworteten blieben dem Projekt schon länger fern.

Ich war eigentlich erstaunt wie wichtig so eine Reputation ist. Dachte nicht das mir diese Zahl so viel bedeuten könnte. Aber der Ehrgeiz geht irgend wie verloren wenn man nicht mehr “belohnt” wird.

Also Jungs bei codekicker.de. Schaut doch das die Reputation wieder funktioniert. Dann kommt sicher wieder mehr Leben in das Projekt.

Auf die letzt Nachfrage, 02.02.2010 bekam ich nicht mal mehr eine Antwort. Ob ich nervig bin?!

kick it on dotnet-kicks.de

10.02.2010  --  GENiALi  --  342 Wörter

Vor kurzem habe ich über eine Fehlermeldung mit WCF geschrieben die nicht wirklich etwas über den Fehler aussagte. Damals ging es um das Laden von Daten. Also vom WCF Host (Server) auf den Client.

Damals schieb ich: “Was mir dabei auffiel, die Einstellung muss nur auf der Client Seite gemacht werden. Auf der Serverseite konnte ich alles so sein lassen wie vorher.”

Jetzt wollte ich das selbe Objekt speichern. Also vom Client auf den Server schicken. Und es machte booom. Die Fehlermeldung war/ist dabei auch sehr aussagekräftig. Nur wusste ich jetzt in welcher Richtung ich suchen musste.

Die Exception meldete etwas in der Form:

"System.ServiceModel.CommunicationException" wurde aufgefangen.
  Message="Die Socketverbindung wurde abgebrochen. Dies kann durch einen Fehler beim Verarbeiten der Nachricht, durch ein Überschreiten des Empfangstimeouts durch den Remotehost oder durch eine Problem bei der zugrundeliegenden Netzwerkressource verursacht sein. Lokaler Sockettimeout: \"00:00:59.9989999\"."

SocketTimeout?! Na ja, ich dachte mir schon das es wahrscheinlich etwas mit der Grösse des zu übertragenden Objektes zu tun haben könnte. Also habe ich auf der Serverseite die app.config für den WCF Host angepasst.

<netTcpBinding>
  <binding name="Core" maxReceivedMessageSize="10485760">
    <security mode="TransportWithMessageCredential">
      <message clientCredentialType="UserName" />
      <transport clientCredentialType="None"/>
    </security>
  </binding>
</netTcpBinding>

Die Änderung ist in Zeile 2. maxReceivedMessageSize war schon beim letzten Posting zum Thema schuld.

Das ganz nochmals ausgeführt bekam ich aber noch immer eine Fehlermeldung. Diese war aber nun so präzise das ich das Problem damit auch beheben konnte.

"… Die InnerException-Nachricht war \"Fehler beim Deserialisieren des Objekts \"vom Typ Library.Person\". Die maximale Arraylänge (16384) wurde beim Lesen von XML-Daten überschritten.

Hier weiss man doch sofort was zu tun ist.

<netTcpBinding>
  <binding name="Core" maxReceivedMessageSize="10485760">
    <readerQuotas maxArrayLength="10485760"/>
    <security mode="TransportWithMessageCredential">
      <message clientCredentialType="UserName" />
      <transport clientCredentialType="None"/>
    </security>
  </binding>
</netTcpBinding>

Zeile 3 löste das Problem. OK, die Zahl ist sicher übertrieben hoch. Ich frage mich aber so oder so wie so man WCF nicht irgend wie in verschiedenen Modis betreiben kann. Ein Modi für Internet, mit all seinen Einschränkungen und ein Modi für Interne Firmenanwendungen wo die diversen Grenzen viel höher liegen.

Ich muss ja Windows auch nicht anders konfigurieren wenn ich eine 100MB Datei aus dem eigenen LAN laden will.

kick it on dotnet-kicks.de

03.02.2010  --  GENiALi  --  255 Wörter

Zur Zeit darf ich an einem grossen Projekt mitarbeiten das regen gebrauch von WCF macht. Die ganze Kommunikation zwischen Server und Client baut auf WCF auf.

Jetzt habe ich einige Zeit an einem Fehler gesucht bei dem die Meldung ziemlich irreführend war, wie sich jetzt zeigte.

Die Fehlermeldung ist in etwa so (gekürzt):

"System.ServiceModel.CommunicationObjectFaultedException" wurde aufgefangen.
  Message="Das Kommunikationsobjekt \"System.ServiceModel.Security.SecuritySessionClientSettings`1+ClientSecurityDuplexSessionChannel[System.ServiceModel.Channels.IDuplexSessionChannel]\" kann nicht zur Kommunikation verwendet werden, weil es sich im Faulted-Status befindet."

Wenn ich mir die Meldung jetzt so anschaue denke ich mir, dass scheint doch ein Problem mit der Security zu sein. So ganz klassisch. Berechtigungen auf irgend eine Ressource oder so.

Weit gefehlt. Hat nicht mit dieser Sicherheit zu tun. Es gibt im WCF noch eine andere Sicherheit. Die gegen DoS (Denial of Service) Angriffe. Das heisst, gewisse Grenzen sind im WCF definiert die nicht überschritten werden dürfen/können. Das ist zum Beispiel die maximale Nachrichtengrösse (maxReceivedMessageSize). Per Default auf 65’536 Byte beschränkt. Das gibt meinem Szenario nicht viel her. Als ich diesen Wert erhöhte kam die Fehlermeldung nicht mehr.

Was mir dabei auffiel, die Einstellung muss nur auf der Client Seite gemacht werden. Auf der Serverseite konnte ich alles so sein lassen wie vorher. Hier ein Stück Code wie es gemacht werden kann.

private static T BindEndpoint<T>(string endPointAdress)
	where T : class
{
	EndpointAddress endpoint = new EndpointAddress(endPointAdress);

	NetTcpBinding binding = new NetTcpBinding();
	binding.MaxReceivedMessageSize = 10485760;

	ServiceClient<T> client = new ServiceClient<T>(binding, endpoint);

	return (T)client.InnerChannel;
}

Die Methode wir 1 zu 1 kopiert nicht einfach so funktionieren. Der relevante Teil ist in Zeile 7 zu finden. Die Nachrichtengrösse kann somit etwa 10MB betragen.

kick it on dotnet-kicks.de

27.01.2010  --  GENiALi  --  6 Wörter

Tipp 30 aus: “Der pragmatische Programmierer”.

 

Irgend wie kann das gewaltig nerven. Ich bin an einem relativ grossen Projekt. Dabei muss ich, quasi Fliessbandmässig, neue Klassen erstellen.  Allerding sind die Klassen nicht public. Jedesmal das public ergänzen nervt doch gewaltig.

Lösung:

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache\CSharp\Code\1031\Class.zip
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache\CSharp\Code\1031\Interface.zip

In diesen zwei ZIP-Dateien sind die Vorlagen drin. Einfach noch ein public hinzufügen und schon klappt es wie gewünscht.

Wie so MS neue Klassen defaultmässig private macht ist mir nicht ganz klar. Ich brauche mehr public Klassen als private.

using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ == 3.5)using System.Linq;
$endif$using System.Text;

namespace $rootnamespace$
{
	public class $safeitemrootname$
	{
	}
}

Das public in Zeile 8 macht es möglich.

kick it on dotnet-kicks.de

18.01.2010  --  GENiALi  --  229 Wörter

Vor kurzem wurde ich mit dem Buch “Effektive Softwarearchitekturen” fertig. Das waren 421 spanende Seiten Lektüre ohne grosse Überraschungen. Ich bin jetzt seit 1999 in der Informatik und habe durch lesen und Ausbildung schon fast alles einmal gesehen was in dem Buch vorkam. Aber Anwenden ist dann wieder eine andere Sache. Architekt wäre ich nicht. Wollte ich auch nicht. Aber es war sehr spannend zu lesen. Wenn man solche Bücher als spannend bezeichnen kann.

Vor allem gut waren die zwei Kapitel von zwei Beispielprojekten. Dort hat der Autor zwei Architekturdokumente von echten Projekten in gekürzter Form abgedruckt. Und das war echt spannend. Allerding habe ich mich gefragt ob er wirklich jede Bemerkung dort auch in einem richtigen Dokument gemacht hätte. Zum Teil waren die richtig angriffig auf gewisse Stakeholder. Es war aber sehr amüsant zu lesen.

Und jetzt habe ich mit “Der Pragmatische Programmierer” angefangen. Bei dem Buch war schon die Einleitung sehr lesenswert. Es ist nicht einfach aufzuhören mit dem lesen. Ich lese es bei der Arbeit in meiner täglichen Stunde Selbststudium. So schnell sind die “Lesestunden” selten rum. Kann ich allen nur empfehlen.

Auf die Idee dieses Buch zu lesen kam ich weil es in vielen andern Büchern zum Thema Programmieren immer mal wieder als Pflichtlektüre genannt wird. So nach dem Motto, jeder der sich Programmier nennt muss dieses Buch gelesen haben. Genau das mache ich jetzt.

13.01.2010  --  GENiALi  --  553 Wörter

Zur Zeit arbeite ich in meiner Freizeit an einem kleinen Projekt für meine Frau. Um das kleine Projekt zu realisieren brauche ich eine Domain und ein Hoster der mir die Domain hostet. Was lag da näher als das bei dem Hoster zu machen wo auch mein Blog läuft.

Es zeigte sich dann sehr schnell, dass das eine sehr weise Entscheidung war. Folgende Gründe machen mich stolz bei Simple Hosting Kunde zu sein (tönt das geschwollen :-) ).

Grund 1

Nach dem reservieren der Domain bei Switch, und dem bestellen des Windows Hosting ging es keine 12 Stunden und die Domain war erreichbar. Verdammt schnell.

Grund 2

Für das Projekt will ich ein CMS nutzen. Das muss mit .NET umgesetzte sein und darf nichts kosten. Ich landete nach einigen Versuchen bei N2 CMS. N2 wurde mit ASP.NET MVC gemacht. Ich will die URL’s in der Form “http://www.domain.ch/Seite1” oder “http://www.domain.ch/Seite1/Subseite1” nutzen, also ohne das .aspx am Ende. Und das wollte einfach nicht. Auch bei mir lokal nicht. Nach einigem Suchen bin ich dann über die Thematik “IIS Wildcard Mapping” gestolpert. Im IIS6 muss das in IIS Verwaltungskonsole gemacht werden. Im IIS7 kann das via web.config eingestellt werden.

Ich machte also ein Mail mit dem Hinweis das ich eine Anwendung nicht an den Start kriege. Ich fragte, ob das Hosting auf einem IIS6 oder IIS7 laufe, schickte noch ein Link mit wie man das IIS Wildcard Mapping im IIS6 einstellen würde und das ich das im IIS7 via web.config machen könnte.

Die Antwort überraschte mich: Herr Schumacher, ich kann ihnen die Domain heute Abend auf einen IIS7 verschieben. Wenn sie wünschen.

Klar wünsche ich das. Kosten: nix

Wau, dass nenne ich Service.

Wie sich dann zeigte funktioniert N2 auf einem IIS7 mit dem IIS Wildcard Mapping in de web.config.

Grund 3

Wenn ich auf dem Server viel Update kann es sein, dass sich das Web komplett aufhängt. Dann reichen nicht mal mehr Änderungen an der web.config um den AppPool neu zu starten. Deshalb hat es sich bewährt das meine Hostings in einem eigenen AppPool läuft. Wenn das dann noch im Parallels freigeschaltet wird kann ich meinen eigenen AppPool neu starten. So bringe ich mein Blog regelmässig wieder an den Start.

Ich habe also per Mail erläutert was mir das beim Blog bedeutet und wie wertvoll dieses Feature ist. Was passiert?

Herr Schumacher, ich habe ihnen soeben einen eigenen AppPool eingerichtet und dieses Feature auf dem Parallels freigeschaltet. Viel Spass.

Kosten: Wider nix

So etwas erlebt man nicht oft. Bei mir die absolute Ausnahme. Ich habe das Gefühl der einzige Kunde zu sein. Und das gibt es extrem selten. Das passierte mir noch fast nie.

Das ganze mit zwei Mitarbeitern die sich um 6 Webserver (nur Hosting) kümmern auf denen ca. 1’200 Domains gehostet werden. Dann noch ein paar andere Dienste wie Housing Kunden Server, DNS Server, Antispam usw.

Aussage von Chris Mayer: “lieber klein aber fein, dynamisch und auf einen möglichst guten Service mit guter Hardware im Hintergrund”. Und genau das merkt man.

Deshalb. Wenn jemand ein sehr gutes Windows Hosting sucht, mit allem drum herum, ist bei Simple Hosting genau richtig. Das einfachste Hosting, dass ich habe, kostet nur 1.5 Zigarettenpäckli im Monat. In einem Jahr dann nur noch eines. :-)

PS: Ich bin Nichtraucher. :-)

PSS: Nein, für dieses Posting bekomme ich nichts. :-)

07.01.2010  --  GENiALi  --  141 Wörter

Ich lese gerade das Buch Effektive Softwarearchitekturen. Im Kapitel 10 geht es um SOA (Service Orientierte Architektur). Ich habe schon viel darüber gelesen und mir meine Meinung darüber gemacht.

Im Buch gibt es eine Tabelle die beschreibt was SOA aus der Sicht diverser Stakeholder ist. Mir ist eine Sicht sehr sympathisch, nämlich die der Strategieberater und Software-Hersteller.

SOA ist …

Ein unklar definiertes Hype-Thema, das in den Ohren unserer Kunden vielversprechend klingt. Ein gigantischer Beratungs- und Werkzeugmarkt voller Chancen und Risiken.

Dabei geht es doch einfach nur um Services die irgend wie (XML, SOAP, RPC usw.) zur Verfügung gestellt werden, unabhängig voneinander sind und die von einem Konsumenten genutzt werden.

Also, alter Wein in neuen Schläuchen.

image

Ich zapfe 3 (Web)Services an und mache irgend etwas in meiner Anwendung damit. Alte Technik unter neuem Begriff (SOA). So sehe ich das.

Und Ihr?

kick it on dotnet-kicks.de