Posts mit dem Label BizTalk2006 werden angezeigt. Alle Posts anzeigen
Posts mit dem Label BizTalk2006 werden angezeigt. Alle Posts anzeigen

Montag, 7. Juni 2010

SAP .Net connector is not installed

Nach langem suchen warum den der "SAP .Net connector" beim Zugriff über den SAP Adapter immer "not installed" ist, hat sich herausgestellt das die Fehlermeldung nichts mit dem eigentlichen Problem zu tun hatte. Hintergrund war das man Sourcen von einem bereits existierenden BizTalk-System auf ein neu eingerichtetes BizTalk-System kopiert hatte und da man den SAP Adapter 2.0 brauchte wurde dann nachträglich der "SAP .Net connector" und der "SAP Adapter 2.0" installiert.

Da aber zur Designtime aus VisualStudio heraus normalerweisse die benötigten RFC-Baustein Schemas aus SAP importiert werden und VisualStudio dabei für jedes dieser RFC-Bausteine eine DLL in SAP Adapter Unterverzeichnis "Bin" (z.b. C:\Program Files (x86)\Microsoft BizTalk Adapter v2.0 for mySAP Business Suite\Bin\ ) anlegt, fehlten diese natürlich.

Problemlösung: Entweder die DLLs aus dem alten System in das neue kopieren (sollte funktionieren) oder aber die SAP-Schemas noch einmal aus VisualStudio heraus importieren (und wie immer HostInstance neu starten nicht vergessen ;) ).

Donnerstag, 6. Mai 2010

BizTalk 2006 R2 oder nicht R2?

Wie Lösungen von trivialen Fragen in langwieriges Suchen ausarten können... "Wie ist auf die Schnelle herauszufinden ob ein BizTalk 2006 System, ein R2 Release ist?"

Es findet sich kein R2 Logo, kein Hinweis in den Add/Remove Programm Options, oder sonst etwas... WCF Adapter / RFID? Und wenn das nicht mitinstalliert wurde? Als einzigen verlässlichen Hinweis fand sich nur die Versionsnummer:

BizTalk Server 2006 Adminitration Console -> Menü "Help" -> "About Microsoft BizTalk Server Administration":

- 3.5.1602.0 = BizTalk 2006
- 3.6.1404.0 = BizTalk 2006 R2

Mal sehen wie weit das noch von diversen Patches beeinflusst wird...

Mittwoch, 3. März 2010

BizTalk 2006 BAM EventBus Service Error Event

Fehlermeldung im BizTalk Application Event Log:

Event Type: Error
Event Source: BAM EventBus Service
Event Category: None
Event ID: 25
Date: 3/1/2010
Time: 6:44:58 PM
User: N/A
Computer: BES086.comlineag.cl.local
Description:
Either another TDDS is processing the same data or there is an orphaned session in SQL server holding TDDS lock.Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. SQLServer: BES082, Database: BizTalkDTADb.


Das Problem mit Lösungsvorschlägen ist beschrieben unter
http://support.microsoft.com/kb/841334 (Error Description dazu beachten)

In meinem Fall war die Lösung zu verwaisten Sessions angebracht:
http://msdn.microsoft.com/en-us/library/aa275788(SQL.80).aspx

Die Kurzfassung zur Lösung:

mit der Management Konsole sich auf die BizTalk SQL DB verbinden und exec sp_who als Query ausführen. Das listet die gegenwärtig Session mit ihrem jeweiligen Status und der jeweiligen spid auf. Die 'sa' Sessions interessieren nicht, alle anderen Sessions (bis auf die eigene) kann man dann gegebenenfalls mit dem kill Befehl abschießen (kill <spid>)
Dabei sollte natürlich sichergestellt sein, das der BizTalk in der Zeit nicht auf das System zugreift, bzw. ein anderer User Remote auf dem System arbeitet ;)

Dienstag, 7. Juli 2009

Microsoft Message Queue MSMQ

Vor einigen Wochen habe ich einen Crashkurs innerhalb weniger Stunden in Sachen MSMQ durchlaufen müssen, an dessen Ende eine Biztalk Lösung stand. Da ich auf einige Hindernisse gestoßen war, fasse ich mal meine Erfahrungen zusammen.

Kurz gesagt, MQ dient der asynchronen Kommunikation zweier Applikationen. Und das auch über Rechnergrenzen, oder gar Domänengrenzen hinweg. Dazu legt nach dem FIFO Prinzip eine Anwendung auf ihrem System Nachrichten ab, und eine andere lauscht auf die Adresse und greift die Nachricht ab. MSMQ kann sich dabei verschiedener Kommunikations Protokolle bedienen. (engl. Einführung in MSMQ)

MSMQ unterstützt gegenwärtig drei Queue Typen:
- Public Queues (benötigt Active Directory, Adressen werden dort direkt veröffentlich und sind von allen in der selben AD erreichbar, bzw. über Domängrenzen über Replikation)
- Private Queues (benötigt kein AD, die Adresse muss der empfangenden Anwendung daher aber auch bekannt sein, selbst mit AD!)
- Transaktions Queues (Sicherheit verbunden mit hohen Overhead Kosten)

Zum Entwickeln empfehlen sich Hilfstools, denn das größte Problem meines Erachtens (eigentlich das Einzige das ich hatte) ist die Kommunikationsinfrastruktur zu konfigurieren, solange man nicht eine sehr simple Netzwerkstrutur vor sich hat.

Zu einem gibt es dafür von MS das MQBench Paket und dann noch von Cogin ein freies MSMQ First Aid Kit.

Im bin Verzeichnis von MQBench gibt es 2 Tools: MSMQRecv bzw. MSMQSend, mit denen man über die Kommandozeile das Empfangen und Senden testen kann. Zum Vorgehen empfiehlt es sich zuerst einmal lokal zu testen, ob die MQ korrekt eingerichtet wurde. Funktioniert das, kann man zum eigentlichen Empfangsrechner über gehen der die Messages später abgreifen soll. Diese Tools haben aber einen Nachteil, sie unterstützen nur den Typ Public Queue, da sie nur das Pathnamen Format beherrschen. Aber der Pathname MUSS im AD nachgeschlagen werden, sobald es über Rechnergrenzen hinweg geht, d.h. Lokal funktionieren Pathnamen auch wunderbar mit Privat Queues!

Beispiel lokaler(!) Zugriff auf private MQ:
msmqrecv .\private$\MeineTestNachrichten

Remote Zugriff:
msmqrecv <rechnername>\private$\MeineTestNachrichten
-> Error: 0xc00e0003 (= Queue Not Found)
(geht nicht, Path wurde nicht in AD publiziert, da privat!)


Anmerkung: ein Versuch das ganze mit einem Formatname anstatt Pathname aufzurufen führt zu einem 0xc00e0014 (= Illegal Queue Pathname), die Tools können nur Pathname!

Das selbe gilt leider auch für das FirstAidKit!

Wie aber Eingangs erwähnt, unterstützt MSMQ unterschiedliche Kommunikationprotokolle, wie z.B. TCP. Dadurch hat man also die Möglichkeit ohne AD Lookup direkt auf die MQ eines anderen Rechners zuzugreifen. Um aber den Protokoll Zugriff beschreiben zu können, benötigt man das Direct Format Name Format. Da ich kein freies Tool kenne das einem das abnimmt, hab ich mir kurzerhand was in .NET zusammengecoded.

(Eine Anmerkung zum MSMQ Biztalk Adapter, dieser unterstützt das "Direct Format Name" Format ebenfalls von Haus aus.)

Unter System.Messaging gibt es im .NET Framework das richtige Werkzeug dazu:

...
MessageQueue mq = null;
bool cr = false;
string strFormatnameaddress = @"FormatName:DIRECT=TCP:192.168.1.114\test";
 
try
{
   msg.Priority = MessagePriority.Normal;
   mq = new MessageQueue(strFormatnameaddress);
 
   cr = mq.CanRead;
}
catch (System.Messaging.MessageQueueException ex)
{
   Console.WriteLine("MSMQ Error: " + ex.ToString());
}
catch (Exception ex)
{
   Console.WriteLine("Error: " + ex.ToString());
}
finally
{
   mq.Close();
}
 
return cr;
...

Das CanRead Flag gibt uns auf jeden Fall Informationen dazu, ob wir nun überhaupt auf die MQ zugreifen können, oder nicht. Jedenfalls ist die Programmierung sehr simpel, das gilt auch für das empfangen, bzw. senden von Messages:
...
// empfang aller Messages in der MQ
Message[] msgs = mq.GetAllMessages(); 
 
...
 
// senden einer Message in die MQ
Message msg = new Message();
msg.Label = "Test Message";
msg.Body = "Das ist nur ein Test";
mq.Send(msg);
...

Das eigentliche Problem fängt nun da an, wenn man keinen Zugriff auf die Message Queue bekommt. Das läßt sich in der Regel auf Security Einstellungen zurückführen. Was kein großes Problem ist, solange man sich am gleichen AD befindet und man über den Pathnamen zugreifen will (Es reicht in der Regel dem User des lesenden Rechners einfach die Zugriffsrechte auf die MQ zu gewähren, notfalls den Anonymus Access erlauben). Befindet man sich in unterschiedlichen AD (aber noch unter dem gleichen Forrest) benötigt man eigentlich nur noch zusätzlich eine funktionierende AD Replikation für den Pathnamen Zugriff. Ansonsten sollte in der Regel der Direct Format Name Zugriff funktionieren.

Was aber wenn sich die Rechner in unterschiedlichen Forrests befinden? Die unterschiedlichen Forrests müßen sich diese Vertrauen, und das bedeutet entweder Zertifikate, oder die "Umsonst"-Variante: ein Loch in die "Mauer schlagen". Dazu benötigt es nicht viel mehr als eines zusätzlichen Eintrages in die Registry des MQ Servers:
http://msdn.microsoft.com/en-us/library/cc236138(PROT.10).aspx
1.) HKLM\Software\Microsoft\MSMQ\Parameters\security\NewRemoteReadServerAllowNoneSecurityClient dword = 1
2.) Zugriffsrechte für Anonymus

Das gibt dem Admin sicherlich richtige Magenschmerzen ;)


Dazu hat John Breakwell von Microsoft, der einem auch bei einem Microsoft Call Support leistet, ein ausführliches Blog verfasst. Folgende Einträge beschäftigen sich mit MSMQ und Rechnern in unterschiedlichen Forrests: http://blogs.msdn.com/johnbreakwell/archive/2008/02/14/how-do-i-send-msmq-messages-between-domains.aspx http://blogs.msdn.com/johnbreakwell/archive/2008/06/27/cross-forest-msmq-you-need-to-be-trusting.aspx http://blogs.msdn.com/johnbreakwell/archive/2008/10/13/authenticating-msmq-messages-between-forests.aspx

Mittwoch, 6. Mai 2009

BizTalk SAP Adapter 2.0 - IDOC Unknown Segment

Beim abrufen eines IDOCs unter BizTalk 2006 mit dem BizTalk Adapter 2.0 erhielt ich die Fehlermeldung:

The schema generation encountered the following error(s):
1. Error occured while generating schema for: xxxx
Error returned: SEGMENT_UNKNOWN


Die Problemursache war, dass nicht alle Segmente in SAP released waren.

Donnerstag, 11. Dezember 2008

Error: 0x80040204 - Invalid user auth.

Die im Titel stehende Meldung erhielt ich letztens beim lauf einer meiner Schnittstellen, die sich sequentiell durch Datensätze (in meinem Fall Accounts) eines CRM Systems per Webservice itteriert und darin automatisiert Änderungen durchführt.

Kleiner Fehler ganz groß. Als erstes wurde von allen (ausser mir ;) ) vermutet das sich der am CRM anmeldende User etwas erlaubt was ihm so nicht gestattet ist. Da ich diesen User aber bei allen Zugriffen benutze und alle anderen ja einwandfrei funktionierten, konnte ich das gleich ausschließen.
Meine Vermutung ging in Richtung des im Datensatz selbst zugewiesenen Systemuser (Owner) der bei jeder Änderung mit überegben wird. Dieser User ist ein auf der CRM Seite vorhandener Domänenuser und wird vom CRM System noch einmal extra als Entität "Systemuser" gehalten.
Meine Recherchen ergaben das man den Domänenuser aus der Domäne GELÖSCHT hatte, aber der User natürlich immer noch im CRM als Entität "Systemuser" vorhanden und bei vielen Datensätzen als Owner eingetragen war.
Durch die Löschung jedoch aus der Domäne hat der User praktisch alle rechte verloren und darf somit seine ihm zugeteilten Datensätze auch nicht mehr ändern.
Im vorliegenden Fall, hat die Firma in deren CRM das vorgekommen ist, in allen Datensätze mit einer Referenz zu dem rechtelosen User diesen durch einen in der Domäne noch aktiven User ausgetauscht. Damit hat dann wieder alles funktioniert.
CU TerA 

Mittwoch, 8. Oktober 2008

BizTalk 2006 Error BEC2004: Validate Instance failed for schema

warning BEC2004: Data at the root level is invalid. Line 1, position 1

Da erstelle ich doch glatt ein XSD Schema mit dem Flatfile Schema Wizard von BizTalk2006/R2 für meinen Kollegen, schick es ihm rüber und es funktioniert nicht...

Noch einmal getestet bei mir, geht immer noch, bei ihm... nicht...

Also hingesetzt bei ihm, Schema nachkreiert -> Funktioniert...

Zu mir rübergeschickt -> geht nicht...

WinDiff -> Kein Unterschied...

Unterschied Kollege hat 64Bit Betriebssystem ich 32Bit, also Files in einer anderen Text Codierung neu abgespeichert auf meinem 32Bitter.... Gleiches Verhalten...!

Copy und Paste vom Inhalt des 64Bit Schemas in eine neue Datei... Gleiches Verhalten...!!!

Nun bin ich etwas ratlos. Deutet vielleicht auf ein Problem mit Escape Zeichen hin... aber der Austausch von Escape Sequencen für Tab und CR/LF brachte auch keine Lösung.

Äußerst kurios, zumal ich schon vorher mehrfach mit anderen Windows 2003 64Bit Systemen das gleiche tat und XSD Schemas aus einer 32Bit Entwicklungsumgebung migrierte in das dortige Projekt.


Irgendjemand eine Idee?

Donnerstag, 2. Oktober 2008

SAP Adapter in Biztalk 64Bit oder "Retrieving the COM class factory for component with CLSID {XXX} failed..."

Versucht man mit dem normalen vorgehen die SAP-Adapter für Biztalk unter einem 64Bit Windowssystem zu installieren, bekommt man so lustige Fehlermeldungen wie diese hier:Natürlich sagt diese treffend aus wo der Fehler liegt (Ha, HA!). Der Fehler liegt einfach darin das der SAP-Adapter seinen Dienst nur auf 32Bit Systemen nachgeht und auf 64Bit Systemen einfach seine DLLs nicht findet. Um das zu beheben muss man nach der Installation (SAP-Connector und SAP-Adapter) dem SAP Adapter expliziet eine 32Bit Umgebung zuweissen. Dazu legt manin der Biztalk Administration Console unter "Platform Settings/Hosts" einen neuen Host an und konfiguriert diesen auf 32Bit.

Danach noch das ganze im SAP Adapter zuweissen (Send und Receive) und siehe da, es läuft.
Jetzt nur nicht vergessen den Host zu restarten ;)

Mittwoch, 17. September 2008

BizTalk und SAP Adapter Error

Schon ne ganze Weile habe ich immer wieder neue Probleme mit dem Microsoft SAP Adapter, dieses mal war es (mal wieder) richtig tricky. IDocs aus SAP verschwanden einfach spurlos im wahrsten Sinne des Wortes. Im BizTalk Tool "Health and Activity Tracking" gabs einen spärliche Meldung mit "Loading property information list by namespace failed or property not found in the list. Verify that the Schema is deployed properly." Redeploys brachten aber keine Verbesserung. Nach diversen anderen Versuchen, bin ich schließlich mit dem freien Sysinternal Process Monitor Tool von Microsoft an die Sache. Es ist nicht so einfach sich durch den Datenwust zu kämpfen und das richtige Problem zu identifizieren. Jedenfalls hatte ich danach ein paar Informationen mehr und den Kreis der Verdächtigen stark eingekreist. Die IDOCs kamen im System an und wurden auch erstmal intern verarbeitet, aber als es dann darin ging das IDOC in die Pipeline zu schieben, verschwand einfach alles. Im Registry Monitoring Teil tauchte ein kleiner Warnhinweis auf, das für den SAP Adapter nicht alle Registry Informationen gefunden werden konnten (aus welchen Gründen auch immer die verschwunden waren).

Lange Rede, kurzer Sinn: ein referenzieren der Microsoft.BizTalk.SAPAdapterProperties.dll aus dem (SAP Adapter Installationsverzeichnis) über die BizTalk Ressourcen selbst brachte letztendlich die Lösung. Der Adapter wurde wieder gefunden und das Problem war gefixt, ohne die tatsächliche Ursache zu reparieren. 
Ich vermute eine komplette Neuinstallation des Adapters könnte vielleicht das Problem beheben... bliebe zu testen, doch im Moment bin ich einfach nur froh, dass es nach doch einer recht anstrengenden Fehlerjagd quer durchs ganze System, wieder funktioniert. Bin eben Entwickler und kein SysAdmin ;)

Montag, 15. September 2008

BizTalk error "...has no Transport type specified"

Das hat mich ein bischen Nerven gekostet, zum Glück hat Félix Mondelo in seinem Blog eine simple Lösung parat:
Einfach unter C:\Documents and Settings\[user name]\Application Data\Microsoft\BizTalk Server\Deployment\BindingFiles alle Files im BindingFile Verzeichnis löschen. 
...es ist wirklich unglaublich an wievielen verstreuten Stellen man bei BizTalk suchen und rumschrauben muss :( 

Dienstag, 9. September 2008

Biztalkbeschleunigung durch Speicherzuweisung.

Bei einem aktuellem Projekt bei dem ca. 7000 Datensätze aus einem MS-CRM durch Biztalk2006 (inkl. Aufbereitung) gelesen werden sollten und danach in eine MS-SQL Tabelle landen sollte, musste ich eklatante Performanceschwächen feststellen. Wenn man nicht alle paar Minuten die Host-Instace manuell restarted hat, begab sich Biztalk für unbestimmte Zeit in Tiefschlaf. Erst nachdem in der „Administration Console“ unter „Platform Settings“->“Hosts“->“BizTalkServerApplication“->”Advanced“->”Throttling Thresholds”->”Process memory usage:” ein Wert von ‘700’ hinterlegt wurde, lief das ganze wie gewünscht. Der vorhergeige Wert ‚25’ wurde als „%“ interpretiert (wie alle Werte zwischen 1 und 100), wobei damit nicht "von Gesamtspeicher" gemeint ist sondern nur "freier Speicher" benutzt wird. Somit ist es Auslastungs- und Glückssache wie viel Speicher dem Biztalk wirklich zur verfügung stehen.

Montag, 8. September 2008

Microsoft Posters (Bezugsquellen und Links)

Wer kennt sie nicht als Software Entwickler, überall hängen diese schön bunten Poster herum die mal mehr oder weniger sinnvoll Features und Frameworks anschaulich demonstrieren können.

Bei Microsoft kann man einge davon herunterladen. Was ich sehr bedauerlich finde ist, dass ich keine Einstiegsseite auf MSDN kenne, die einem alle Poster zusammenfassend präsentiert. Nun gut, man kann immerhin die Suche bemühen, dennoch bleibt bei mir das Gefühl nicht alle zu erfassen. Natürlich kann man die auch für einen verhältnismäßig günstigen Preis erwerben, z.B. bei Amazon.de wie die das Posterpack für das .NET Framework 2.0, oder auch über Technet (da kann man auch z.B. die Jahresarchiv DVDs des MSDN Magazins ordern).
Empfehlenswert finde ich folgende Poster:
  • Ein Namespace und Type Überblick für das .NET Framework 3.5.
  • Hochinteressant finde ich die PnP (Patterns and Practices) Poster: Smart Client Architektur und der Overview.
  • Für Shortcutfetischisten die C# Keybinding Poster für VS2008 und VS2005 (gibt es auch für Basic und C++. J# und der Rest gehen leider leer aus).
  • Wer mit InfoPath oder Sharepoint entwickelt wird hier fündig, inkl. einer Developer Roadmap für Office 2007.
  • Für BizTalk2006 Entwickler gibts gleich nen ganzen Schwung an Poster, u.a. die Datenbank Struktur inkl. der SQL Jobs und die Runtime Architektur.

Mittwoch, 20. August 2008

BizTalk Hotrod Online Magazin

Und ein drittes Mal BizTalk von mir heute... Es gibt ein interessantes freies Online PDF Magazin das sich mit BizTalk beschäftigt und vierteljährlich erscheint: http://biztalkhotrod.com/default.aspx Es ist auf jeden Fall einen Blick wert, da man als BizTalk Entwickler sowieso nicht gerade mit Publikationen erschlagen wird. Die zurückliegenden Ausgaben können unter hier heruntergeladen werden Beim Thema Publikationen sollte ich noch erwähnen dass einzige gute Buch das ich kenne: Professional BizTalk Server 2006 von Wrox (in Englisch versteht sich). Es geht nicht besonders stark in die Tiefe, behandelt eher konstruierte Aufgabenstellungen, aber man findet eigentlich immer zu einem Problem zumindestens einen Ansatz mit dem sich weiterarbeiten lässt. BizTalk Profis werden wohl etwas weniger mit dem Buch anfangen können. Das Buch ist gut strukturiert und liest sich sehr flüssig. Nach Amazon Bewertung würde ich da mal 4 von 5 Punkten für vergeben.

BizTalk Deployment OOM Probleme

Out of Memory ist so eine Totschlag Fehlermeldung beim BizTalk 2006 Deployment, die ziemlich viele Ursachen haben kann, wie diverse Googlesuchsessions bei mir ergaben. Eine kurze Checkliste woran es liegen kann und ich gegenveriferziert habe bei mir selbst: 1. Hat der Host zu wenig (Arbeits-)Speicher: Visual Studio (wenn auf dem Hostsystem) schließen und neu starten (kann schon reichen) und/oder "Services" öffnen (Run Box Command: services.msc) und ein Restart von "SQL Server (MSSQLSERVER)" mit allen daran hängenden anderen Services (geschieht automatisch). Zusammen sollte das jedenfalls den Speicher dramatisch leeren 2. Hat der Host genug (Arbeits-)Speicher, bzw. der Erste Tipp funktioniert nicht: ...dann hilft ein überprüfen der SQL Jobs. Es ist enorm wichtig das der "MessageBox_Message_Cleanup_BizTalkMsgBoxDb"-Job läuft(!!) Jede Message die mehr als EINEN Subscriber hat wird nämlich nicht sofort aus der Message Box intern gelöscht, das macht erst später dieser Job. Zu finden ist dies im "Microsoft SQL Server Management Studio", rechts unter SQL Server Agent->Jobs Langwieriges Deployment... Tipp 2 ist übrigens auch zu prüfen wenn das Deployment sehr lange dauert, bzw. es immer langsamer wird. Hier ist auch gegenfalls zu überprüfen, wenn Visual Studio sich auf dem selben System befindet, ob im Projekt unter Deployment -> BizTalk Group -> Server "(LOCAL)" eingetragen ist und nicht(!) die (lokale) IP Adresse. Warum auch immer, auch dies hat einen "bremsenden" Effekt.

Inconsistent duplicate module attribute

Ein 'Microsoft.XLANGs.BaseTypes.BPELExportable': inconsistent duplicate module attribute Error hat mich ziemlich lange geärgert in Biztalk2006 R2 beim kompilieren. Des Rätsels Lösung war das sowohl in den Projekteneigenschaften unter Build - Code Generation: BPEL Compliance True als auch in einer Orchestration unter Eigenschaften: Module Exportable auf True gesetzt war. Leider natürlich an einer völlig anderen Stelle als im Error Output angegeben. Ein setzen innerhalb der Orchestration auf False behob das Problem... Offenbar ist "doppeltgemoppelt" nicht immer gut ;)

Donnerstag, 7. August 2008

Kenne deine .NET Werkzeuge - HttpUtility Class

Ich denke eines der größten individuellen Mankos ist, dass man (ich) nicht sein Framework und die damit zur Verfügung gestellten Werkzeuge kennt. Ich vermute mal ein ASP.NET Entwickler wird die HttpUtility Class (http://msdn.microsoft.com/en-us/library/system.web.httputility(VS.80).aspx) kennen, ich kannte sie nicht. Es war unerlässlich das ich ein XML von Hand zusammenkleben mußte und mein LoadXML in ein XmlDocument schlug grandios fehl. Das Problem war schnell gefunden im XML Editior von Visual Studio, der hat mir einen Eintrag rot unterringelt der ein & enthielt. Ich wollte schon loslegen eine Hilfsklasse zu schreiben die mir meine Values &, ä, ö, ü, <, > usw. konvertiert nach &amp; etc. ... Doch "Halt!", meinte mein Kollege, da muss es doch was im Framework schon geben. Nach etwas "googeln" fand ich dann die HttpUtility Class. Und die hat eine HtmlEncode Methode die einem das wunderbar erschlägt :)

string encodedValue = System.Web.HttpUtility.HtmlEncode(unencodedValue);

Das Ganze funktioniert auch innerhalb von Biztalk. Die System.Web dll muss hier explizit referenziert werden, das dürfte vermutlich auch für alle Nicht-ASP.NET Projekte gelten.

Montag, 21. Juli 2008

BizTalk 2006 Subscriptions

Manchmal sieht man den Wald vor lauter Bäumen nicht...
Um sich alle Subscriptions in BizTalk anzeigen zu lassen, gehe man in der Administration auf die Group -> New Query -> Search For - Equals - Subscriptions -> Run Query

voilà

(doh)

Custom Pipeline Components - Update

Seit meinem ersten Eintrag zum selber schreiben von Custom Pipeline Components (http://justacodeblog.blogspot.com/2008/05/custom-pipeline-components-wizard.html) hab ich inzwischen soviel Erfahrungen zu dem Thema gesammelt, das ich hierzu ein Update verfassen muss.

Ein paar Anmerkungen zum arbeiten mit Martijn Hoogendoorn's Component Wizard und Pipeline Komponenten generell:

- Der Beste Ansatz um die erstellten Komponenten stressfrei zu deployen und in der Toolbox des Pipeline Projektes zu verwenden ist es die fertige DLL Komponente: 1.) in den GAC zu deployen 2.) in das Pipeline Component Verzeichnis von Biztalk zu deployen (z.B.: C:\Program Files\Microsoft BizTalk Server 2006\Pipeline Components) Beides kann man gut im Post Built Event erledigen z.B. wie folgt (für 64Bit Windows mit angepasst, darum die relativen Pfade) "$(DevEnvDir)..\..\SDK\v2.0\Bin\gacutil.exe" /i "$(TargetPath)" xcopy "$(TargetPath)" "$(DevEnvDir)..\..\..\Microsoft BizTalk Server 2006\Pipeline Components" /R /Y

- Log4Net und 64Bit Windows können Probleme in Verbindung mit der Biztalk Toolbox Erkennung bereiten. Dabei kann entweder die korrekte Namenserkennung der Komponente, oder gar die komplete Komponenten Erkennung fehlschlagen. Das Problem vermute ich in den Windows Sicherheitseinstellungen (?). Ansonsten hilft als "Workaround" nur das komplette Entfernen von Log4Net aus der Komponente

- Beim Umbennen einer Pipeline Komponente (Namespace und/oder Klassenname) muss man zwei weitere Punkte beachten für die korrekte Anzeige in der Toolbox später. 1.) Unterhalb der Kompenenten Klassendeklaration wird der Name registriert:

   1:  private System.Resources.ResourceManager resourceManager = new System.Resources.ResourceManager(
   2:      "<Namespace>.<Pipeline Komponenten Name>",
   3:      Assembly.GetExecutingAssembly());

2.) Im Ressource File selbst: COMPONENTNAME = <Namespace>.<Pipeline Komponenten Name>

- Für einen rundimentären Test ist das pipeline.exe Tool selbst eine schnelle und schöne Sache. Jedoch empfiehlt es sich unbedingt auch eine BizTalk Test Orchestration zusammenzuklicken! Der Umstand ist simpel. Während die pipeline.exe unsere Komponente direkt aus dem lokalen Filesystem aufruft, wird in BizTalk ein COM Aufruf ausgeführt! Dies verändert den Kontext in dem sich der Stream befindet, den man gerade verarbeitet! Simples Beispiel: solange man über die pipeline.exe testet, kann der Stream nach FileStream gecastet werden, um z.B. den File Namen auszulesen. Führt man den selben Aufruf in BizTalk aus, sind die FileStream Informationen gar nicht mehr vorhanden. Ein Cast schlägt fehl!

- Für das Testen mit der pipeline.exe empfiehlt es sich eine eigene Solution Konfiguration anzulegen (z.B. Debug Pipeline). In den Projekteigenschaften konfiguriert man dann unter Debug:

  • Start external program: <pfad zum Pipeline Test Tool>\Pipeline.exe
  • Command line arguments z.B.: -pt <namespace>.<biztalk pipeline orchestration> -an <custom pipeline component name>-d <input flatfile> -v
  • und ggf. noch die Working directory anpassen wenn nötig

(nicht vergessen bei einer neuen Solution Konfiguration unter der Projekteigenschaft Build - Advanced Button die Debug Info mit erzeugen zu lassen (full))

- Bei der Implementierung ist darauf zu achten das BizTalk die Pipeline bei hoher Last automatisch parallel ausführt!! D.h. VORSICHT beim Umgang mit z.B. statischen Elementen, wer nicht darauf verzichten kann, muß Threadsicher programmieren!

Donnerstag, 17. Juli 2008

Biztalk SAP Adapter Error 8007007e

Vielleicht "schon wieder" ein 64Bit Enviroment Issue... (?) der Auslöser ist mir nicht ganz klar, aber bei meinem aktuellen Projekt tritt nach der Konfiguration im Biztalk Server 2006 von SAP Ports alle paar Minuten im Eventlog den folgenden Fehler:

Nach etwas Rumforschen und Abgleichen der SAP Adapter Installationsverzeichnisse ergab sich das sowohl die ATL71.dll als auch die MSVCR71.dll fehlten. Offensichtlich hat der Adapter Installer Probleme diese Komponenten unter Windows 2003R2/x64 zu installieren. Ich musste diese von Hand nachträglich reinkopieren nach "C:\Program Files (x86)\Microsoft BizTalk Adapter v2.0 for mySAP Business Suite" Der Fehler stoppte sofort, ohne irgendetwas neu zustarten, von alleine.

Donnerstag, 3. Juli 2008

log4net, IBaseComponent & 64Bit Windows Server

log4net 1.2.10, IBaseComponent & 64Bit Windows Server funktionieren irgendwie nicht zusammen. Das witzige unter 32Bit funktioniert es!

Für eine Biztalk Pipeline habe ich zwei Komponenten entwickelt die aus einem Flatfile Format eine XML Datei erzeugt. Beim einbinden der Komponten war im Browser von VisualStudio bei einer der korrekte Name aus der IBaseComponent zu sehen, bei der anderen der Assembly Name.
Dumm denn auf meiner 32Bit Entwicklungsmaschine war dem nicht so, aber auf dem 64Bit Zielsystem. Nach einer etwas längeren Remotedebuggingsession stellte sich dann heraus das bei der Komponente mit dem "falschen Namen", nicht einmal der Konstruktor angesprungen wird, geschweige denn die Informationen aus IBaseComponent, wenn man diese in VisualStudio "an"browst.

Erst nach der vollständigen Entfernung der log4net Referenzierung (darauf muss man erstmal kommen), wurde der korrekte Name aus dem Interface angezeigt. Befand sich log4net gar im GAC war die Pipeline Komponente überhaupt nicht mehr auffindbar, beim manuellen Browsen gabs dann nur noch den lapidaren Hinweis das wohl etwas mit der Sicherheitseinstellung der Komponente nicht stimmen würde... sehr merkwürdig....

Eine Sicherheitseinstellung in Windows Server? Ein Problem mit log4net? :-/