• Webseitenerstellung und -hosting
  • .NET Anwendungsentwicklung
  • softwaregesteuerte Prozessoptimierung
  • .NET

    Programmierung

  • WebseitenErstellung

    undHosting

  • softwaregesteuerte

    Prozessoptimierung

  • Konzeption

    und Beratung

solutionS Daily Grind - Blog
solutionS

solutionS

%PM, %23. %690 %2012 %15:%Nov

WPF Anwendungspfad ermitteln

Eine globale Settings.xml datei (wie früher) für eine WPF Anwendung global bereitstellen. In dieser wird der Connectionstring zur Datenbank für alle beteiligten Assemblies bereitgestellt. Die Ablage in den App/Web.Config kommt aus diversen Gründen nicht in Frage da die Konfig...
- zur Laufzeit nicht verändert werden kann (Anwendungseinstellungen)
- beim compilieren überschrieben wird
- bei WPF die Config lokal zwischengespeichert wird
also die Datei einmalig erstellen und in der Assembly einfach den Anwedungspfad auslesen.
so etwa?
AppDomain.CurrentDomain.BaseDirectory System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) System.Reflection.Assembly.GetExecutingAssembly().Location Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) System.Reflection.Assembly.GetExecutingAssembly().CodeBase System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess(). MainModule.FileName
leider kriegt man hier nur die lokalen temporären Pfade der Assemblies!
Mit Updatelocation kriegt man den Urpsrungspfad:
System.Deployment.Application.ApplicationDeployment.
CurrentDeployment.UpdateLocation.ToString
Leider scheint Micrsosoft auch Auszubildende auf die Menschheit loszulassen, anders kann ich mir den Rückgabestring nicht zu erklären:
http:\wpfserver\apppath
also häng ich noch folgendes ran:
.Replace("\", "/").Replace("http:/", "http://")
und damit wird dann per linq to xml der Eintrag gelesen
Dim uriXML As Uri = New Uri(strdir & "/Settings.xml")
 Dim konf As XDocument = XDocument.Load(uriXML.ToString)
Connectionsstring = (From ef In konf.Descendants("EF_Connectionstring")).FirstOrDefault.Value 
:
dies ist dann nicht mehr unter: NavigationService.Navigate möglich, man muss sich vorher den Service des Applicationframes holen: zB so: Dim phf As PhoneApplicationFrame phf = CType(Application.Current.RootVisual, PhoneApplicationFrame) phf.Navigate(New Uri("/Pages/pageNews.xaml, UriKind.Relative))    
%PM, %26. %603 %2011 %13:%Jul

WP7 Entwicklerregistrierung

und die Stunden zogen ins Land und ich registriere immer noch ohne Verstand. Zune erkennt Handy, RegTool erkennt Handy, aber nach erfolgreichem Connect kommt die Fehlermeldung: "Verbindung mit dem Handy nicht möglich. Stellen Sie sicher, dass die Zune-Software ausgeführt wird, und dass die Synchronisierungsverbindung zwischen Zune und Ihrem Handy hergestellt wurde." Tja, was tun wenn die Registrierung fürs Deployment des WP7 nicht funktioniert? - Zune Zertfikat erneut installiert - Zune Software erneut installiert - Handy upgedatet - Treiber aktualisiert Der Schlüssel zum Erfolg lag letztendlich an der Firewall an der Port 27077 freigeschalten werden muss. Nachzulesen in folgendem Registryschlüssel: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsPhone\ProxyPorts] da hätte ich aber auch schon vorher draufkommen können...  
Man nehme einen WCF Webservice, ein Silverlight App, einen lokalen IIS und erstelle ein kleines Test-App. Nachdem ich im wundervollen Visuak Studio 2010 beide Projekte in einer Projektmappe vereint habe füge ich bedenkenlos meinen zuvor getesteten Webservice und füge ihn als Dienstverweis meiner App hinzu. Ganz nach Vorschrift! Von meiner schwebenden Wolke riss mich folgender Fehler: Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8' wie wo was? Bindings identisch? standard sollte doch basicHttp sein. Mein Webservice im IIS läuft, auch mit dem MS Testclient. Er lässt sich einfach nicht hinzufügen... Das ganze Internet abgesucht, nix gefunden. OK, nochmal von vorne. IIS deinstalliert, installiert inklusive wirklich aller Zusatzfunktionen. Da meldet sich tief hinten in meinem Gehirn eine Stimme die rief: "Prozessaktivierungsdienst"...oh mann, genau das wars. der muss nämlich aktiviert werden! (und ich Naivling dachte das sei standardmäßig so) http://msdn.microsoft.com/de-de/library/ff637727.aspx    
%PM, %12. %773 %2011 %17:%Mai

WCF Webservice veröffentlichen

Zustand: Unter VB.NET soll ein WCF Webservice erstellt werden der bestimmte Daten zur Verfügung stellt. Der WCF soll auf einem separaten Rechner im IIS bereitgestellt werden. Problem: so einfach wie es Microsoft beschreibt (http://msdn.microsoft.com/de-de/library/ms733766.aspx) funktioniert es nunmal in Praxis oft nicht. ich musste kleinere Stolperfallen bewerkstelligen: Im IIS habe ich ein neues virtuelles Verzeichnis erstellt ("wcf") und meinen Service sowie die web.config dort veröffentlicht. Beim ersten Aufruf über http://iisserver/wcf/wcpService.svc  meckert er an, dass meine Syntax der web.config falsch sei. Was aber de facto nicht so  ist. Ursache ist hier das targetFramework welches sich auf die ASP Version des IIS bezieht. Also muss die ASP Version der IIS Unterseite korrigiert werden. (oder eben die web.config). Aber ich möchte natürlich das Framework 4 nutzen. Eventuell muss ASP zuvor für das Framework registriert (installiert) werden. Das geschieht wie folgt: Danach die ASP Version im IIS konfigurieren:   Ein neuer Versuch und ein neuer Fehler: Da die Verzeichnissicherheit im IIS auf "Standardauthentifizierung" (bzw. Windows Authentifizierung) muss dies in der Web.config berücksichtigt werden. Ein neuer Versuch und der Webservice läuft:
Sollte irgendwer da draußen Visual Studio 2010 SP1 Deutsch nutzen, eine WCF-Dienstanwendung erstellen und das Entity Framework mit Self-Tracking Entities nutzen wollen wird dieser einer jeniger welcher vermutlich eine ganze Litanei von Fehlern bekommen nachdem das Codegenerierungselement hinzugefügt wurde. Unter anderem wird die Datei für die Hilfsklassen der Änderungsverfolgung überhaupt nicht erstellt. Öffnet man diese erscheint lediglich: ErrorGeneratingOutput Lösung von TripodS gibt es diesmal nicht, da es schlichtweg keine gibt. zumindest nicht unter SP1, Deutsch und oben beschrieben Szenario :-( Aussage Microsoft: http://connect.microsoft.com/VisualStudio/feedback/details/556376/add-code-generation-error-in-ef4 Lösung bietet u.U.  ein 3rd Party Tool im Zusammenspiel mit einem WCF Data Service: http://www.olegsych.com/2008/09/t4-tutorial-creatating-your-first-code-generator/ Ich werde das testen und berichten...
%PM, %26. %709 %2014 %16:%Mär

VSTO Runtime Error 0x80131047

Office 2013, 64 bit Windows 7, 64 bit Outlook Addin, 64 bit Fehler: Die Datei oder Assembly "Outlook Addin, Version=1.0.0.0, Culture=neutral" oder eine Abhängigkeit davon wurde nicht gefunden. Der angegebene Assemblyname oder die Codebasis ist ungültig. (Ausnahme von HRESULT: 0x80131047) Die Fehlermeldung bekommt man übrigens nur angezeigt wenn man die Systemvariable VSTO_SUPPRESSDISPLAYALERTS erstellt und auf 0 setzt. Lösung: Ziel CPU auf "AnyCPU" setzen Grund: referenzierte dll :-(
%PM, %16. %606 %2011 %13:%Dez

VBS Debuggen mit Visual Studio 2010

Da ich leider generell auf altbewährtes zurückgreife muss ich zu meiner Schande gestehen, dass ich mich noch wenig mit der Windows Powershell auseinandergesetzt habe - und da mal wieder alles schnell gehen muss, warum nicht auf VB Script zurückgreifen? Meiner Meinung nach hat man hier immer noch am meisten Möglichkeiten. Und da ich für mein Leben gern debugge, will ich das hier natürlich auch. Leider ist dies wieder nur über Umwege möglich. Die Nummern sind die Arbeitsschritte passend zu den Screesnhots weiter unten 1.  in VS 2010 ein neues c++ Makefile-Projekt  erstellen 2. alles was man nicht braucht wegschmeissen 3. und 4.  in den Eigendschaften des Projekts Hilfsprogramm (Utility) wählen und als Debug infos den Pfad zu WScript.exe (Windows Scripting Host) setzen und als Argument den Pfad zum Script setzen inkl desm Paramater X (Debug). 5. ctrl (wichtig!) und F5 , bereits offenen Debugger wählen und gut! :-)    
%PM, %16. %609 %2011 %13:%Dez

VBS Dateien umbennen, verschieben, loggen

...und weil wir grad drüber sind kann ich das Script auch gleich mit veröffentlichen.  btw: 7 Min. asboluter Rekord! :-P Dateien von A nach B schieben. Einen Zeitstempel anhängen, ein logfile schreiben Option Explicit

Dim fsoIO

Dim folQuelle, filQuelle, filDatei, filLog

Dim strfilDest, strfilLog, strfolZiel, strFilSrc

On Error resume next

Set fsoIO = CreateObject("Scripting.FileSystemObject")

Set folQuelle = fsoIO.GetFolder("C:\Users\sschirner\Desktop\vonhier")

strfolZiel = "\\Server-fs\Upload\test\nachhier\"

Set filQuelle = folQuelle.Files

strfilLog = strfolZiel & "bck_copy.log"

Set filLog = fsoio.OpenTextFile (strfilLog,8,true)

For Each filDatei In filQuelle

If lcase(right(filDatei.Name,3)) = "zip" Then

strfilDest = strfolZiel &  year(now) & month(now) & day(now) & hour(now) & minute(now) & "." & fildatei.Name

strFilSrc = filDatei.Pathy

fsoio.MoveFile fildatei.Path, strfilDest

if err.number = 0 then

filLog.Writeline formatdatetime(now) & " - OK - " & strFilSrc & " -> " & strfilDest

else

filLog.Writeline formatdatetime(now) & " - FEHLER! - " & err.Description

err.clear

end if

End If

Next

filLog.close

if err.number <> 0 then

filLog.Writeline formatdatetime(now) & " - FEHLER! - " & err.Description

end if

   
%AM, %10. %497 %2012 %10:%Feb

Team Foundation Server Warteschlange hängt

Weder von vom VS noch per http://TFSServer:8080/tfs/ war ein Zugriff möglich. In der TFS Adminverwaltung war meine teamprojektsammlung offline und im Wartungsmodus. Warum weiss nur Gates persönlich. Gut, soll wohl so sein, allerdings war am nächsten Tag die ominöse Wartung nicht beendet. Jeglicher versuch den TFS neu zu starten oder den Wartungsmodus zu beenden schlug fehl. Detach oder Attach fügten sich nur nachtrgäglich in die Warteschlange ein. Ein Versuch zum Beispiel mit TFSServiceControl unquiesce schlug fehl, lieferte aber auch eine Fehlerquelle: "Zuordnung von Kontonamen wurde nicht durchgeführt". Ich habe dann einfach das kennwort aktualisiert und das Konto neu zugeordnet, dann lief alles wieder einwandfrei. Hoffe mal im Live-Betrieb kommt sowas nicht vor :-(
Seite 3 von 6