Installation des WCF SQL Adapters

Folgende Schritte müssen auf einem 64 Bit System durchgeführt werden:

1) \\OrgFiles\BT Server\ASDK_x64\AdapterFramework64.msi –> komplett
2) \\OrgFiles\BT Server\AdapterPack_x64\AdapterSetup64.msi –> Custom, nur Microsoft BizTalk Adapter for Microsoft SQL Server
3) \\OrgFiles\BT Server\AdapterPack_x86\AdapterSetup.msi –> Custom, nur Microsoft BizTalk Adapter for Microsoft SQL Server

Hintergrund, die Administrations Konsole und die Integration für Visual Studio basiert auf 32 Bit, ansonsten kann man den WCF SQL Adapter via MMC nicht hinzufügen.

4) Biztalk Server Administration / BizTalk Group / Platform Settings / Adapters –> Kontextmenü –> Neu –> Adapter

5) Angabe eines Namens, z.B. WCF-SQL
6) Auswahl des WCF Sql Adapters aus der Auswahlliste
7) OK

Orchestration mit mehreren Empfangsports verknüpfen

Mit Hilfe der Biztalk Management Oberfläche ist es nur möglich, einen einzigen Empfangsport mit einer Orchestration zu verknüpfen. Hier ein Weg, wie man mehrere Empfangsports verknüpfen kann.

1) Legen Sie die Empfangsports mit eindeutigen und zum Projekt passenden Namen in der richtigen Biztalk Applikation an.

2) Legen Sie in der Orchestration einen neuen One Way Port an, bei welchem Sie Nachrichten empfangen können. Als Portbinding geben Sie bitte “Direkt” an. In diesem Beispiel müssen Sie angeben, dass die Verknüpfung via “Filter Expressions” durchgeführt wird.

3) Legen Sie in der Orchestration ein “Receive Shape” an, in dessen Eigenschaften müssen die Filter Expressions gepflegt werden. Hier geben Sie sämtliche unter 1) erstellten Empfangsports mit BTS.ReceivePortName an, z.B. (BTS.ReceivePortName == “ReceiveMsgPort1″) und verknüpfen die Einträge mit OR. Die resultierende Wert der Eigenschaft sollte dann in Visual Studio in etwa so aussehen: (BTS.ReceivePortName == “ReceiveMsgPort1″) (BTS.ReceivePortName == “ReceiveMsgPort2″)

Damit werden nun sämtliche Nachrichten aus der Messagebox, welche mit den oben definierten Empfangsports empfangen wurden, an die Orchestration weiter gegeben.

Basic Authentifizierung bei einem SOAP / Webservice Aufruf

Sie haben einen Webservice (via wsdl zur Verfügung gestellt), welchen Sie aufrufen müssen? Der Betreiber des Webservice hat Basic Authentifizierung / Basic Authentification als Zugriffsmethode eingestellt. Den Webservice haben Sie via “Webverweis hinzufügen” unter Visual Studio mit dem Namen “WebServiceName” hinzugefügt. Die generierte Klasse MyServiceClass ist eine abgeleitete Klasse von SoapHttpClientProtocol aus dem namespace System.Web.Services.Protocols. Auf diese Klassen haben Sie bei entsprechenden via wsdl bereitgestellten Definitionen keinen Zugriff.

Leider reicht es nicht aus, wenn Sie die Zugangsdaten auf folgende Art und Weise hinzufügen:

ICredentials creds;
creds = new NetworkCredential(username, password);
WebServiceName.MyServiceClass client = new WebServiceName.MyServiceClass();
client.Credentials = creds;
client.PreAuthenticate = true;

client.MyMethodCall();

Die Lösung:

Sie müssen zusätzlich eine neue Klassendatei dem Projekt hinzufügen, welche demselben namespace wie MyServiceClass beinhaltet, z.B. WebServiceNameExtended.cs. Als nächstes erstellen Sie eine abgeleitete Klasse von MyServiceClass, z.B. MyServiceClassExtended. In diese Klasse fügen Sie eine Methode GetWebRequest() ein, welche die Standardklasse aus System.Net überschreibt. Auf diese Weise wird jeder Request, welcher abgesendet wird abgeändert und im Header die angegebenen Credentials mitgegeben und zusätzlich die Basic Authentifizierung eingeführt.

Beispiel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.Text;
using System.Web.Services.Protocols;

namespace WebServiceName
{
    public class MyServiceClassExtended : MyServiceClass
    {
        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = (WebRequest)base.GetWebRequest(address);

            if (request.PreAuthenticate)
            {
                NetworkCredential networkCredentials = request.Credentials.GetCredential(address, "Basic ");
                if (networkCredentials != null)
                {
                    byte[] credentialBuffer = new UTF8Encoding().GetBytes(networkCredentials.UserName + ":" + networkCredentials.Password);
                    request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(credentialBuffer);
                }
                else
                {
                    throw new ApplicationException("No network credentials");
                }
            }

            return request;
        }
    }
}

EDI Formate mit Biztalk Server 2006 R2 ff

Industry Segment Encoding Standard Version/ Release Count of Transaction Set XSD/Schemas
General Industry EDIFACT D93A 55
D94A 68
D94B 75
D95A 101
D95B 115
D96A 125
D96B 136
D97A 143
D97B 151
D98A 157
D98B 165
D99A 169
D99B 180
D00A 187
D00B 191
D01A 194
D01B 194
D02A 194
D02B 194
D03A 192
D03B 192
D04A 192
D04B 192
D05A 193
D05B 193
X12 2040 29
3010 39
3020 104
3030 161
3040 187
3050 225
3060 245
3070 273
4010 293
4020 302
4030 309
4040 314
4050 314
5010 318
5020 317
5030 317
Retail UCS 4010 46
4040 65
5020 67
VICS 4010 27
4050 36
5020 45
EANCOM* EAN94 27
EAN97 46
EAN02 46
Health Care HIPAA X12N 4010A1 16

Mehr Informationen unter
http://blogs.msdn.com/b/biztalkb2b/archive/2006/10/27/edi-features-in-biztalk-server-2006-r2.aspx

Zugriff via SQL Adapter auf Gespeicherte Prozedur auf einem entfernten SQL Server

Soll auf eine Gespeicherte Prozedur auf einem entfernten SQL Server via SQL Adapter zugegriffen werden, so muss auf dem entfernten SQL Server in den Sicherheitseinstellungen der Komponentendienste der DTC Netzwerk-Zugriff erlaubt werden.

Fehlermeldung: “Die neue Transaktion kann im angegebenen Transaktionskordinator nicht eingetragen werden”.

Sicherheitseinstellung:

Weitere Informationen zu den einzelnen Einstellungen können hier gefunden werden:
http://msdn.microsoft.com/en-us/library/aa561924.aspx

Wartung der BizTalk Datenbanken

Sollte man beim Biztalk Server 2006 oder höher Probleme mit zu großen Datenbanken besitzen, so kann ich diese Anleitungen empfehlen: http://msdn.microsoft.com/en-us/library/ee308858(BTS.10).aspx

Besonders die Anwendungen MsgBoxViewer und Terminator sind zu empfehlen!

Den Terminator findet man inzwischen auch bei den Downloads: http://www.microsoft.com/download/en/details.aspx?id=2846

Aktivierung eines Biztalk Empfangsspeicherortes via Script

Mit diesem Code können Sie z.B. mit einem Überwachungsdienst gewisse Empfangsspeicherorte überwachen. Dies macht z.B. bei POP3 Empfangsspeicherorte Sinn, bei denen ab und an der POP3 Server nicht verfügbar ist:

System.Management.ManagementObject requiredRLObj = null;
System.Management.ObjectGetOptions objGetOptions = new ObjectGetOptions();
System.Management.ManagementClass rlObjectClass = new ManagementClass("root\\MicrosoftBizTalkServer", "MSBTS_ReceiveLocation", objGetOptions);

System.Management.EnumerationOptions enumObjOptions = new EnumerationOptions();
enumObjOptions.ReturnImmediately = false;
System.Management.ManagementObjectCollection rlObjColl = rlObjectClass.GetInstances(enumObjOptions);

foreach (ManagementObject rlObjInstance in rlObjColl)
{
if (rlObjInstance["Name"] != null)
{
if (string.Compare("Empfangsspeicherortname", rlObjInstance["Name"].ToString(), true, System.Globalization.CultureInfo.CurrentUICulture) == 0)
{
requiredRLObj = rlObjInstance;
}
}
}

try
{
requiredRLObj.InvokeMethod("Disable", null);
requiredRLObj.InvokeMethod("Enable", null);
}
catch
{
Console.Write("Enabling Receive Location failed");
}

Empfangen von Attachments vom Contenttype text/xml via POP3

Das Empfangen von Attachments via POP3 Adapter des Microsoft Biztalk Server 2006 ist z.B. mit einer Orchestration (www.commercelab.de/allgemeines/empfangen-von-emails-mit-attachment-und-speichern-der-angefugten-dateien-unter-ihrem-ursprunglichen-namen/) möglich. Für das Empfangen von text/xml Attachments muss im Receive Port in der POP3 Konfiguration das Feld Textteil-Inhaltselement mit dem Wert text/plain gesetzt werden. Mit dieser Einstellung sind alle Arten von Attachments emfpangbar.

Ohne diese Einstellung erhält man den XLANG Fehler mit dem Ausnahmetyp: WrongBodyPartException.

Probleme mit strikten Nachrichten-Überprüfung der EDI Receive Pipeline

Sollte bei einem EDI Partner Probleme wie z.B. Typenfehler oder z.B. Fehler bzgl. geforderten Dezimalpunkte bei der Verarbeitung von EDI Nachrichten mit der Empfangspipeline unter Biztalk Server 2006 R2 vorkommen, so kann dies durch Unterdrückung der EDI Validierung umgangen werden. Dafür gibt es unter Parteien / EDI Eigenschaften / Partei als Austauschabsender / Einstellungen für Bestätigungsgenerierung und -überprüfung unter dem Bereich Dokumentüberprüfungseigenschaften die Checkbox EDI-Typ. Wenn man diese abwählt, dann werden die eingehenden Nachrichten nicht mehr auf EDI validiert.