Main menu:

Suchen

 
web
kriegermartin.de

Kategorien

September 2010
M D M D F S S
« Jun    
 12345
6789101112
13141516171819
20212223242526
27282930  

Archiv

Error: Cannot import wsdl:portType

Today I tried to access a WorkflowService hosted in IIS on Windows 7, and got this nice little error message:

Error: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporterError: Schema with target namespace ‘http://schemas.microsoft.com/2003/10/Serialization/’ could not be found. XPath to Error Source: //wsdl:definitions[@targetNamespace=’http://tempuri.org’]/wsdl:portType[@name=’IService’]
[… lot more stuff ]
Warning: No code was generated.If you were trying to generate a client, this could be because the metadata documents did not contain any valid contracts or services or because all contracts/services were discovered to exist in /reference assemblies. Verify that you passed all the metadata documents to the tool. Warning: If you would like to generate data contracts from schemas make sure to use the /dataContractOnly option.

Of course the message was completely misleading. It turned out that the IIS Application Pool Identity did not have access rights for c:\windows\temp ! Kent Brown had also found this error after setting an own account for the Application Pool. But it seems that sometimes Windows 7 (RC Build 7100) does not set appropriate default rights.

AttachDbFilename

Ich habe heute versucht ein Sample zu starten, welches einen Connectionstring wie diesen enthält:

const string connectionString = @”Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\SampleInstanceStore.mdf; Integrated Security=True;Asynchronous Processing=True”;

Dabei erhielt ich die Fehlermeldung:

System.Data.SqlClient.SqlException: Fehler beim Anfügen einer automatisch benannten Datenbank für die Datei C:\Users\Martin\Some more subfolders\SampleInstanceStore.mdf. Eine Datenbank mit diesem Namen ist bereits vorhanden, die angegebene Datei kann nicht geöffnet werden, oder sie befindet sich in der UNC-Freigabe.

(System.Data.SqlClient.SqlException: An attempt to attach an auto-named database for file C:\Users\Martin\Some more subfolders\SampleInstanceStore.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.)

Grund ist, das der SQL Server beim Zugriff auf die Datenbankdatei seinen eigenen Benutzeraccount verwendet, in diesem Fall war es NetworkService (Netzwerkdienst). Und der hatte keine Zugriffsrechte auf meine Dateien. Jedoch genügt es auch nicht, den Dateien oder dem Verzeichnis diese Rechte zu geben. Wenn AttachDbFilename wie hier ohne Angabe eines Datenbanknamens verwendet wird, so entspricht der Datenbankname dem Pfadnamen der Datei. Und um diesen zu ermitteln schaut der SQL-Server sich -mit seinem Account- alle übergeordneten Verzeichnisse an. Er benötigt somit auch dort zumindest Leserechte.

Mögliche Lösungen:

  • User Instances: Mit user instance=true im Connectionstring wird eine weiter Instanz von SQL-Server Express (und nur Express!), die unter den Rechten des Benutzers läuft, gestartet. Microsoft möchte dieses Feature allerdings künftig wegfallen lassen.
  • Server Manager: Die Datenbank mit dem Server Manger erzeugen bzw. hinzufügen - und den Connectionstring entsprechend anpassen.
  • Lokales System: Theoretisch könnte man dem SQL Server auch unter einen weniger eingeschränkten Account, wie Lokales System (local system) laufen lassen. Aus Sicherheitsgründen wird man das aber niemals, und erst recht nicht auf einem Produktivsystem, machen wollen.
  • Initial Catalog: Wenn man zusätzlich zu AttachDbFilename den database/initial catalog Parameter setzt so wird dieser Name verwendet. Es genügt dann, wenn die .mdf Datei und ihr Verzeichnis die entsprechenden Rechte besitzt.

WF 4.0

Seit heute ist die Beta 1 von Visual Studio 2010 und .NET 4.0 allgemein verfügbar.

Am 23. Juni 2009 werden die Neuerungen bei der .NET Usergroup Köln in mehreren kurzen Vorträgen vorgestellt. Ich werde etwas zur überarbeiteten Version der Workflow Foundation erzählen und freue mich über interessierte Zuhörer. Eine Anmeldung ist erforderlich!

Folien (pdf)
Demos

FitNesse Debugging

Führt man Tests in FitNesse aus, dann wird gelegentlich auch der Wunsch aufkommen, diese zu debuggen. Das Problem dabei ist, daß die Tests jeweils separate, vom FitNesse Server gestartete, Prozesse sind. FitNesse selbst unter einem Debugger zu starten nutzt daher wenig. Der dokumentierte Weg ist es, die Tests über separate Komandozeilentools unter einem Debugger aufzurufen und die Ausgabe in einer Datei zu speichern. Es geht aber auch anders:

Java

Unter Java wird das Debuggen aktiviert, in dem man beim Aufruf der VM die Option -agentlib:jdwp= nebst allerlei Parametern angibt. Attach debuggerDann kann sich der Debugger über TCP/IP, also auch an einem entfernten Rechner, und andere Protokolle mit der VM verbinden. Es ist sowohl möglich, daß der Debugger das zu debuggende Programm aufruft, als auch umgekehrt.

Da FitNesse den Aufruf der Java VM in COMMAND_PATTERN speichert, ist es beispielsweise mit !define COMMAND_PATTERN {java -agentlib:jdwp=transport=dt_socket,address=12345,server=y,suspend=y -cp %p %m} möglich, den Test im Debugmodus zu starten und auf das Verbinden des Debuggers zu warten. (Natürlich sollte man das nur in eigenen Dateien bzw. einem eigenen virtuellen Verzeichnis machen…) In den Entwicklungsumgebungen (ich verwende NetBeans, jede andere sollte das aber auch können) gibt es eine Funktion um den Debugger zu verbinden (Debug/Attach Debugger). Setzt man vorher noch einen geeigneten Breakpoint, so kann man ab dort dann debuggen.

.NET

Das .NET Debugsystem ist nicht ganz so vielfältig. Es ist -soweit mir bekannt- nicht möglich, ein Programm zu starten und es auf den Debugger warten zu lassen. Debuggen funktioniert nur lokal, es sei denn man hat den Remote Debugging Monitor auf dem entfernten System installiert. Dafür ist es jedoch möglich, den Debugger mit beliebigen laufenden .NET Prozessen zu verbinden, ohne das beim Starten dazu spezielle Optionen angegeben werden müssen.

waitfor.jpgZudem kann ein .NET Programm erkennen, ob es mit einem Debugger verbunden ist (Debugger.IsAttached). Ich habe daher DotNetProxy.exe noch um eine Parameter -d ergänzt, der mit dem Aufruf des Testsystems wartet, bis ein Debugger verbunden (Debug/Attach to Process) wurde.

!define COMMAND_PATTERN {dotnet\DotNetProxy.exe -d %m %p}

dotnetproxy11.zip

FitNesse .NET

Das Akzeptanztestframework Framework for Integrated Test (Fit) mit dem Wiki-GUI FitNesse ist leider viele Jahre außerhalb meiner Wahrnehmung geblieben. Jetzt wurde ich jedoch gleich mehrfach darauf aufmerksam gemacht. Stefan Lieser hat einen sehr guten einführenden Vortrag bei Bonn-To-Code gehalten und ich war bei einer Firma, die FitNesse schon länger in ihren Java-Projekten einsetzt.

FitNesse unterstütz zwei unterschiedliche Testsysteme. Neben dem ursprünglichen Fit auch die Neuentwicklung Slim. Beide haben ihre Vor- und Nachteile - siehe auch dieses Video von Gojko Adzic.

Unter Java ist der Einsatz beider Systeme sehr einfach, mit !define TEST_SYSTEM {slim} wählt man Slim und mit !define TEST_SYSTEM {fit} Fit. Letzteres ist die Standardeinstellung und kann daher auch weggelassen werden.

Mit .NET ist es etwas schwieriger. Das Fit System für .NET wird mit FitNesse mitgeliefert. Um es zu nutzen sind die hier beschriebenen Einstellungen nötig. Slim demgegenüber ist ein separater Download. Um es zu nutzen sind wieder andere, genauer diese, Einstellungen vorzunehmen und der Standardpfad (classes, fitnesse.jar) aus root zu entfernen (wodurch dann die Java-Tests nicht mehr funktionieren…).

Schön ist das alles nicht. Ich habe daher ein kleines Programm geschrieben, welches als Proxy zwischen FitNesse und den Testsystemen vermittelt. Wenn man DotNetProxy.exe und DotNetProxy.config beispielsweise in das FitNesse\dotnet Verzeichnis legt und den Inhalt der DotNetProxy.config Datei an das eigene System anpasst so genügt

!define TEST_SYSTEM {slim}
!define COMMAND_PATTERN {dotnet\DotNetProxy.exe %m %p}

für Slim .NET. Für Fit muß dann nur noch die TEST_SYSTEM Definition geändert oder entfernt werden.

DotNetProxy.zip

SQL Server 2008: Script Data

Script WizardThe SQL Server 2008 Management Studio has a nice little new feature which seems to be omitted from the documentation. The Script Wizard (Database - Tasks - Generate Scripts) now has a “Script Data” option. If selected the Wizard will generate INSERT statements for the data in the scripted tables. This can be very handy.

This is a feature of Management Studio, therefore it works also with older database server versions.

Hopphopp Tschingbum!

Stoppwörter nennt man Wörter die in nahezu jedem Text in einer Sprache auftreten, wie beispielsweise Artikel (der, die, das) und Präpositionen (an, auf, unter). Aufgrund ihrer Häufigkeit und meist geringen inhaltlichen Bedeutung werden sie bei der Suche nach Texten und bei der Erstellung des dazu genutzten Index normalerweise nicht berücksichtigt.

StoppwörterDie Volltextsuche in SQL Server 2008 nutzt natürlich auch Stoppwörter. Wenn man diese nicht selbst festlegen möchte kann man die von Microsoft in der Tabelle sys.fulltext_system_stopwords für 46 Sprachen mitgeliferten Wörter nutzen. Dabei fällt auf, daß die Liste für Deutsch sehr umfangreich ist. Nur Russisch und brasilianisches Portugiesisch haben noch mehr Einträge. Im Deutschen werden zwar offensichtlich mehr Stoppwörter benötigt als im Englischen. Aber gleich elf mal so viele erscheint mir doch etwas sehr viel. Ansehen kann man sich die Wörterliste mit:

SELECT stopword
  FROM sys.fulltext_system_stopwords
  WHERE language_id=1031

Etwa 600 der Einträge sind Zahlwörter in verschiedenen Formen (dreißig, -ste, -stem, -sten, -ster, -stes). Unter den übrigen findet sich jedoch allerlei Seltsames. Pscht paff peng piep patsch padautz, quak quiek ksch kuckuck. Es ist schon erstaunlich, was demzufolge in fast jedem Text in deutscher Sprache vorkommen soll. Boing, buh, bum, bums. Bäh. Welche Literatur mag Microsoft da wohl ausgewertet haben? Comics? Fob Eiapopeia, Pö.

Ojemine!

FrOSCon 2008

Sehr kurzfristig wurde ich auf die Free and Open Source Software Conference (FrOSCon) in St. Augustin bei Bonn aufmerksam. Das Programm vernachlässigte leider Open Source Projekte im .NET/Mono Umfeld. Dennoch fand ich es interessant und besuchte einige Vorträge dieser Veranstaltung.

In der Keynote des ersten Tages sprach Andrew S. Tannenbaum (dessen Buch Verteilte Systeme die Grundlage des gleichnamigen Kurses an der Uni war) über Probleme bei der Entwicklung immer umfangreicher werdender Betriebssysteme. Als Lösung schlägt er eine Mikrokernel-Architektur vor, bei der Treiber und Dienste jeweils eigenständige Usermode-Prozesse mit eingeschränkten Rechten sind, welche von einem “resurrection manager” überwacht und, wenn nötig, neu gestartet werden. Minix3 ist seine Implementation eines solchen Systems. Der Leistungsverlust durch die häufigen Kontextwechsel und Überprüfungen werde dabei durch den Gewinn an Stabilität aufgewogen.

Quasi in die gegenteilige Richtung ging die Keynote des zweiten Tages, Simple is Hard, von Rasmus Lerdorf. Er sprach über die Leistung von PHP Anwendungen. Dabei verglich er die direkte Implementierung einer Webanwendung in PHP mit Anwendungen, welche PHP Frameworks verwenden. Seiner Meinung nach sind Frameworks überflüssig. Eine klare Struktur eines Programmes ließe sich auch ohne aufwändige Rahmenwerke erreichen und der durch sie entstehende oft große Leistungsverlust sei nicht zu rechtfertigen.

Desweiteren fand ich unter anderem die Vorträge übers Troubleshooting, das Systemüberwachung mit Nagios und über maschinelles Lernen mit Apache Mahout lohnend. Auch der SVNChecker scheint mir ein vielversprechendes Tool zu sein und mit einer Wiimote kann man nette Sachen machen.

Insgesamt war es ein lohnender Blick über den Tellerrand. See you @ FrOSCon 2009!

Report Manager 2005 Help 

Help in FirefoxThe Microsoft SQL Server 2005 Report Manager web application has help pages in several languages. They display nicely in IE, but in Firefox they are reduced to a mere 

 is the unicode byte-order mark, coded in UTF-8. A first inspection with Firebug revealed that this application does not set the charset in the http header. So IE guesses the charset, while Firefox follows the standard default ISO-8859-1, and displays 

Omitting the charset header is never a good idea, but adding UTF-8 charset information did not solve the problem. While it shows some text in Firefox, German umlauts and other special characters where only visible in the table of contents, not in the main text. It turns out that some files (index.htm, tocParas.js, tocTab.js, noscript_toc.htm) are in UTF-8, while others are in ISO. In every language. A bulk charset converter would be handy…

Addendum 26.08.08: The same issue exists in SQL Server 2008.

Microsoft Certified Professional Developer

mcpd zertifikatIch brauchte mal wieder etwas zum Angeben. Daher bin ich jetzt nicht mehr nur ein gewöhnlicher professioneller Entwickler wie jeder andere auch. Nein, ich bin ein Microsoft Zertifizierter Professioneller Entwickler (MCPD: Windows Developer), bestätigt durch Bill Gates. :->

Für alle die sich auch diesen Prüfungen stellen möchten kurz mein Eindruck: Insbesondere vor der ersten Teilprüfung hatte ich einigen Respekt, schließlich ist die Themenliste lang und bietet viel Raum für gemeine Detailfragen. Letztlich fand ich den Test jedoch relativ einfach. Ein Großteil der Fragen wurde im 1 aus 4 Günther-Jauch-Stil gestellt und die falschen Antworten erinnerten mich teilweise durchaus an 50 € Fragen. Wenn man die Aufgaben sorgfältig liest und berücksichtigt, daß .NET ein recht vernünftig konzipiertes System mit nicht allzu vielen Seltsamkeiten ist, sind naheliegende Antworten oft auch richtig. Die weiteren Teilprüfungen empfand ich als nicht ganz so simpel, aber auch nicht übertrieben schwer. Erfahrung und Vorbereitung sind sehr wichtig - und die Anforderungen werden sicherlich individuell unterschiedlich empfunden. Dennoch besteht meines Erachtens hier kein Grund zur Panik.

Geprüft wurde ich bei Oradata in Antalya. Dieses Zentrum hat einen Prüfungsplatz in einem kleinen Raum mit Fenster zum Flur und selbst regelbarer Klimaanlage. Für den Preis der Prüfungen in Deutschland bekommt man in der Türkei noch einen Last-Minute Urlaub dazu. Schön war’s, danke.