Partager via


Problèmes de conception de l'adaptateur

La configuration de l’adaptateur est conservée dans la base de données d’authentification unique lorsque l’utilisateur modifie la configuration au moment de la conception. Au moment de l’exécution, le moteur de messagerie extrait la configuration de l'adaptateur et la livre à l'adaptateur. Quatre types d'informations de configuration sont livrés à l'adaptateurs :

  • configuration du gestionnaire de réception

  • configuration (point de terminaison) de l'emplacement de réception

  • configuration du gestionnaire d’envoi

  • configuration (point de terminaison) de l'emplacement d’envoi

configuration du gestionnaire de réception et d’envoi

La configuration du gestionnaire d’un adaptateur est remise à l’adaptateur lors de son implémentation du IPersistPropertyBag facultatif. Interface de chargement . La configuration du gestionnaire n'est remise qu'une fois, par conséquent, si la configuration du gestionnaire de l'adaptateur est modifiée une fois que le service BizTalk a démarré, l’adaptateur n’est pas mis à jour. Dans le modèle commun l’adaptateur considère la configuration du gestionnaire comme configuration par défaut ; la configuration de la terminaison remplace la configuration du gestionnaire terminaison par terminaison.

Le fragment de code suivant illustre l’analyse de la configuration. La configuration de l’adaptateur se trouve dans la propriété passée à l’appel de charge dans la propriété de chaîne AdapterConfig. Cette valeur de propriété contient un document XML qui représente la configuration de l'adaptateur. L’adaptateur doit charger cette configuration dans un modèle objet de document (DOM) ou dans un lecteur XML et utiliser XPath pour extraire les propriétés individuelles.

public class MyAdapter : IBTTransport,   
 IBTTransportConfig,   
 IBTTransportControl,  
 IPersistPropertyBag,   
 IBaseComponent  
{  
...  
// Handler configuration properties...  
private int defaultBatchSize = 0;  
private string defaultHeader;  
  
// IPersistPropertyBag.Load() implementation...  
public void Load(IPropertyBag pb, int pErrorLog)  
{  
// The adapter configuration is in the property  
 // “AdapterConfig” in the form of an Xml blob...  
object obj = null;  
pb.Read("AdapterConfig", out obj, 0);  
  
// Create a DOM and load the Xml blob...  
XmlDocument dom = new XmlDocument();  
string adapterConfig = (string)obj;  
dom.LoadXml(adapterConfig);  
  
// XPath the individual properties...  
XmlNode node =   
 document.SelectSingleNode(“/Config/batchSize”);  
defaultBatchSize = int.Parse(node.InnerText);  
  
node = document.SelectSingleNode(“/Config/header”);  
defaultHeader = node.InnerText;  
}  
}  

Configuration des emplacements de réception

Les informations de configuration de l’emplacement de réception sont remises à une carte lors de son implémentation d’IBTTransportConfig. Cette interface contient les trois méthodes AddReceiveEndpoint, UpdateEndpointConfig et RemoveReceiveEndpoint. Le moteur de messagerie indique à l’adaptateur sur quels points de terminaison il a besoin d’écouter pour recevoir des messages. Lorsque la configuration d'un point de terminaison individuel est modifiée, l’adaptateur est averti de la modification apportée à ce point de terminaison. En revanche, lorsque la configuration du gestionnaire est modifiée, l'adaptateur ne reçoit aucune notification. De la même façon, l’adaptateur n’a pas besoin de gérer les fenêtres de service car BizTalk Server ajoute ou supprime les points de terminaison à mesure que les fenêtres de service deviennent actives ou non.

AddReceiveEndpoint

Lorsqu’une carte doit commencer à écouter sur un point de terminaison, le moteur appelle IBTTransportConfig.AddReceiveEndpoint en passant l’URI de l’emplacement de réception, un sac de propriétés contenant la configuration de l’adaptateur pour ce point de terminaison et un deuxième conteneur de propriétés contenant BizTalk Server configuration spécifique à ce point de terminaison. L’adaptateur doit écrire l’URI dans le contexte du message en tant que BizTalk Server propriété système InboundTransportLocation.

Le fait de lire les propriétés de l’emplacement de réception à partir du jeu de propriété est identique au fait de lire la configuration du gestionnaire selon la description ci-dessus. La configuration BizTalk Server passée à l’adaptateur contient une propriété unique, TwoWayReceivePort, qui indique si le port est unidirectionnel ou bidirectionnel. Le fragment de code suivant montre comment déterminer si le port de réception est unidirectionnel ou bidirectionnel dans le jeu de propriétés de BizTalk Server.

public void AddReceiveEndpoint(  
 string  url,   
 IPropertyBag adapterConfig,   
 IPropertyBag bizTalkConfig )  
{  
...  
  
// The property "TwoWayReceivePort" in the BizTalk Config  
// property bag indicates whether the port is one or two  
 // way...  
  
 // Add receive location to config cache (not shown here)  
  
object obj = null;  
bizTalkConfig.Read("TwoWayReceivePort", out obj, 0);  
  
if ( null != obj )  
this.twoWay = (bool)obj;  
}  

UpdateEndpointConfig

Lorsque la configuration d’un emplacement de réception actif est modifiée, le moteur utilise l’API UpdateEndpointConfig pour informer l’adaptateur qu’il doit utiliser une autre configuration. Toute la configuration est transmise à l’adaptateur, y compris la configuration spécifique à BizTalk Server.

RemoveReceiveEndpoint

Lorsqu’un emplacement de réception n’est plus actif, l’adaptateur est notifié via RemoveReceiveEndpoint. Une fois l’adaptateur retourné à partir de RemoveReceiveEndpoint , il n’est plus autorisé à utiliser cet URI pour envoyer des messages dans le moteur.

Configuration du port d’envoi

Le moteur de messagerie écrit la configuration du port d’envoi au contexte de message dans l’espace nom de l’adaptateur avant d’envoyer le message à l’adaptateur. L’adaptateur lit et valide la configuration, qu’il utilise immédiatement pour contrôler la transmission du message. Pour les adaptateurs d’envoi qui prennent en charge des envois par lots, il se peut que des messages destinés à différents ports d'envoi se trouvent dans le même lot, par conséquent l'adaptateur doit gérer ces lots "mixtes".

Le fragment de code suivant montre comment lire le OutboundTransportLocation qui est l’URI du port d’envoi. Il montre également lire l'objet blob XML contenant la configuration de l’adaptateur avant de lire les propriétés individuelles.

...  
 private static readonly PropertyBase UriProperty =   
 new BTS.OutboundTransportLocation();  
  
 private string propertyNamespace =   
  "http://schemas.mySchemas.com/MyAdapter/myadapter-properties";  
private string uri;  
private string headers;  
private int timeOut = 1000;  
  
private void ReadSendPortConfig(IBaseMessage msg)  
{  
// Read the OutboundTransportLocation,   
 // i.e. the send port uri....  
uri = (string)msg.Context.Read(  
 UriProperty.Name.Name, UriProperty.Name.Namespace);  
  
// Read the adapters configuration Xml blob from   
 // the message...  
XmlDocument locationConfigDom = null;  
object obj = msg.Context.Read(  
 "AdapterConfig", this.propertyNamespace);  
  
// If this is a dynamic send there will not be   
 // any configuration...  
if ( null != obj )  
{  
locationConfigDom = new XmlDocument();  
locationConfigDom.LoadXml((string)obj);  
  
this.headers = Extract(  
 locationConfigDom, "/Config/headers", true);  
  
 this.timeOut = ExtractInt32(  
 locationConfigDom, "/Config/timeOut", true);  
}  
}  
  
 // Helper method to XPath string properties...  
private static string Extract(  
 XmlDocument document, string path, bool required)  
{  
XmlNode node = document.SelectSingleNode(path);  
if (!required && null == node)  
return String.Empty;  
if (null == node)  
throw new ApplicationException(string.Format(  
 "No property was found at {0}", path));  
return node.InnerText;  
}  
  
  // Helper method to XPath int32 properties...  
private static int ExtractInt32(  
 XmlDocument document, string path, bool required)  
{  
string s = Extract(document, path, required);  
return int.Parse(s);  
}   

Conseil d’implémentation : Les adaptateurs doivent en général utiliser la propriété de contexte de message OutboundTransportLocation pour déterminer l’adresse à laquelle envoyer le message. Ce faisant, l’adaptateur peut gérer les transmissions statiques et dynamiques de façon cohérente. Cela permet également de simplifier la modification des adresses dans les fichiers de liaison de production.

XSD

Quatre fichiers XSD inclus dans l’exemple d’adaptateur de fichier sdk gèrent principalement la configuration de l’adaptateur : ReceiveHandler.xsd, ReceiveLocation.xsd, TransmitLocation.xsd et TransmitHandler.xsd.

Les rubriques suivantes portent sur chacun de ces fichiers et expliquent comment les modifier :

Dans cette section