Serveur SMTP universel - Pourquoi des services web ?

Vue d'ensemble
La programmation à base de composants est devenue plus populaire que jamais. Il n'y a guère d'application aujourd'hui qui n'implique pas l'utilisation de composants sous une forme ou une autre, provenant généralement de différents fournisseurs. Au fur et à mesure que les applications sont devenues plus sophistiquées, la nécessité d'exploiter des composants distribués sur des machines distantes s'est également accrue.

Une solution de commerce électronique de bout en bout constitue un exemple d'application basée sur des composants. Une application de commerce électronique hébergée sur une ferme de serveurs Web doit transmettre les commandes à une application de gestion intégrée (ERP) en arrière-plan. Dans de nombreux cas, l'application ERP est hébergée sur un matériel différent et peut fonctionner sous un autre système d'exploitation.

Le Modèle d'objets distribués de Microsoft (DCOM), une infrastructure d'objets distribués qui permet à une application d'appeler des composants du Modèle d'objets composant (COM) installés sur un autre serveur, a été porté sur plusieurs plateformes non Windows. Mais le DCOM n'a jamais été largement adopté sur ces plateformes, de sorte qu'il est rarement utilisé pour faciliter la communication entre des ordinateurs Windows et non Windows. Les éditeurs de logiciels ERP créent souvent des composants pour la plateforme Windows qui communiquent avec le système back-end via un protocole propriétaire.

Certains services utilisés par une application de commerce électronique peuvent ne pas se trouver du tout au sein du centre de données. Par exemple, si l'application de commerce électronique accepte les paiements par carte de crédit pour les articles achetés par le client, elle doit faire appel aux services de la banque commerciale pour traiter les informations de carte de crédit du client. Mais dans la pratique, DCOM et les technologies associées telles que CORBA et Java RMI sont limitées aux applications et composants installés au sein du centre de données de l'entreprise. Cela s'explique principalement par deux raisons : par défaut, ces technologies utilisent des protocoles propriétaires, et ces protocoles sont intrinsèquement orientés connexion.

Les clients qui communiquent avec le serveur via Internet se heurtent à de nombreux obstacles potentiels. Partout dans le monde, les administrateurs réseau soucieux de la sécurité ont mis en place des routeurs et des pare-feu d'entreprise afin de bloquer pratiquement tout type de communication sur Internet. Il faut souvent un événement exceptionnel pour qu'un administrateur réseau accepte d'ouvrir des ports au-delà du strict minimum.

Si vous avez la chance de convaincre un administrateur réseau d'ouvrir les ports nécessaires au fonctionnement de votre service, il y a fort à parier que vos clients n'auront pas cette chance. Par conséquent, les protocoles propriétaires tels que ceux utilisés par DCOM, CORBA et Java RMI ne sont pas adaptés aux scénarios Internet.

L'autre problème, comme je l'ai dit, avec ces technologies, c'est qu'elles sont intrinsèquement orientées connexion et ne peuvent donc pas gérer correctement les interruptions de réseau. Comme vous n'avez pas de contrôle direct sur Internet, vous ne pouvez pas faire de suppositions quant à la qualité ou à la fiabilité de la connexion. En cas d'interruption de réseau, la prochaine requête que le client enverra au serveur risque d'échouer.

Le fait que ces technologies soient orientées connexion complique également la mise en place des infrastructures à équilibrage de charge nécessaires pour atteindre une grande évolutivité. Une fois la connexion entre le client et le serveur interrompue, il n'est pas possible de simplement rediriger la requête suivante vers un autre serveur.

Les développeurs ont tenté de surmonter ces limites en s'appuyant sur un modèle appelé sans nationalité programmation, mais leur succès a été limité car ces technologies sont assez lourdes et rendent coûteux le rétablissement d'une connexion avec un objet distant.

Étant donné que le traitement de la carte de crédit d'un client est effectué par un serveur distant sur Internet, DCOM n'est pas la solution idéale pour faciliter la communication entre le client du site de commerce électronique et le serveur de traitement des cartes de crédit. Comme dans une solution ERP, un composant tiers est souvent installé au sein du centre de données du client (dans ce cas, par le fournisseur de la solution de traitement des cartes de crédit). Ce composant ne sert guère plus qu’un proxy facilitant la communication entre le logiciel de commerce électronique et la banque du commerçant via un protocole propriétaire.

Voyez-vous une tendance se dessiner ici ? En raison des limites des technologies existantes pour faciliter la communication entre les systèmes informatiques, les éditeurs de logiciels ont souvent dû se résoudre à mettre en place leur propre infrastructure. Cela signifie que des ressources qui auraient pu servir à améliorer les fonctionnalités du système ERP ou du système de traitement des cartes de crédit ont été consacrées à l'élaboration de protocoles réseau propriétaires.

Afin de mieux prendre en charge ce type de scénarios Internet, Microsoft a d'abord opté pour une stratégie visant à enrichir ses technologies existantes, notamment les COM Internet Services (CIS), qui permettent d'établir une connexion DCOM entre le client et le composant distant via le port 80. Pour diverses raisons, les CIS n'ont pas été largement adoptés.

Il est apparu clairement qu'une nouvelle approche s'imposait. Microsoft a donc décidé d'aborder le problème en partant de la base. Voyons quelques-unes des exigences auxquelles la solution devait répondre pour être couronnée de succès.

  • Interopérabilité Le service à distance doit pouvoir être utilisé par des clients sur d'autres plateformes.
  • Accessibilité sur Internet Cette solution devrait permettre de prendre en charge efficacement les clients qui accèdent au service à distance depuis Internet.
  • Interfaces fortement typées Il ne doit y avoir aucune ambiguïté quant au type des données envoyées à un service distant et reçues de celui-ci. De plus, les types de données définis par le service distant devraient correspondre assez bien aux types de données définis par la plupart des langages de programmation procéduraux.
  • Capacité à tirer parti des normes Internet existantes La mise en œuvre du service à distance doit s'appuyer autant que possible sur les normes Internet existantes et éviter de réinventer des solutions à des problèmes qui ont déjà été résolus. Une solution fondée sur des normes Internet largement adoptées peut tirer parti des outils et des produits existants conçus pour cette technologie.
  • Prise en charge de toutes les langues La solution ne doit pas être étroitement liée à un langage de programmation particulier. Java RMI, par exemple, est étroitement lié au langage Java. Il serait difficile d'invoquer des fonctionnalités sur un objet Java distant à partir de Visual Basic ou de Perl. Un client doit pouvoir implémenter un nouveau service Web ou utiliser un service Web existant, quel que soit le langage de programmation dans lequel il a été écrit.
  • Prise en charge de toute infrastructure de composants distribués La solution ne doit pas être étroitement liée à une infrastructure de composants particulière. En effet, vous ne devriez pas être obligé d'acheter, d'installer ou de maintenir une infrastructure d'objets distribués simplement pour créer un nouveau service distant ou utiliser un service existant. Les protocoles sous-jacents doivent permettre un niveau de communication de base entre les infrastructures d'objets distribués existantes, telles que DCOM et CORBA.

Au vu du titre de cet ouvrage, il n'est guère surprenant que la solution mise au point par Microsoft soit connue sous le nom de Services Web. Un service Web met à disposition une interface permettant d'invoquer une activité spécifique pour le compte du client. Un client peut accéder au service Web en utilisant les normes Internet.

Éléments constitutifs des services Web
Le schéma suivant présente les éléments fondamentaux nécessaires pour permettre la communication à distance entre deux applications.

Voyons ensemble à quoi sert chacun de ces éléments constitutifs. Comme de nombreux lecteurs connaissent bien DCOM, je mentionnerai également l'équivalent DCOM de chaque élément constitutif.

  • Découverte L'application cliente qui doit accéder aux fonctionnalités fournies par un service Web doit pouvoir déterminer l'emplacement du service distant. Cela s'effectue par le biais d'un processus généralement appelé découverte. La découverte peut être facilitée par un annuaire centralisé ou par des méthodes plus ponctuelles. Dans DCOM, le Service Control Manager (SCM) fournit des services de découverte.
  • Description Une fois que le point de terminaison d'un service Web donné a été identifié, le client a besoin d'informations suffisantes pour interagir correctement avec celui-ci. La description d'un service Web comprend des métadonnées structurées concernant l'interface destinée à être utilisée par une application cliente, ainsi qu'une documentation écrite sur le service Web, incluant des exemples d'utilisation. Un composant DCOM expose des métadonnées structurées concernant ses interfaces via une bibliothèque de types (typelib). Les métadonnées contenues dans la bibliothèque de types d'un composant sont stockées dans un format binaire propriétaire et sont accessibles via une interface de programmation d'application (API) propriétaire.
  • Format du message Pour échanger des données, un client et un serveur doivent s'accorder sur une méthode commune d'encodage et de formatage des messages. Une méthode standard d'encodage des données garantit que les données encodées par le client seront correctement interprétées par le serveur. Dans DCOM, les messages échangés entre un client et un serveur sont formatés conformément au protocole DCOM Object RPC (ORPC).

En l'absence d'une méthode standard pour formater les messages, il est pratiquement impossible de développer un ensemble d'outils permettant de dissocier le développeur des protocoles sous-jacents. La mise en place d'une couche d'abstraction entre le développeur et les protocoles sous-jacents permet à ce dernier de se concentrer davantage sur le problème métier à résoudre et moins sur l'infrastructure nécessaire à la mise en œuvre de la solution.

  • Codage Les données transmises entre le client et le serveur doivent être encodées dans le corps du message. DCOM utilise un schéma d'encodage binaire pour sérialiser les données contenues dans les paramètres échangés entre le client et le serveur.
  • Transports Une fois le message formaté et les données sérialisées dans le corps du message, celui-ci doit être transféré entre le client et le serveur via un protocole de transport. DCOM prend en charge plusieurs protocoles propriétaires liés à divers protocoles réseau, tels que TCP, SPX, NetBEUI et NetBIOS sur IPX.

Choix de conception des services Web

Abordons quelques-uns des choix de conception qui sous-tendent ces éléments constitutifs des services Web.

Choix des protocoles de transport

La première étape consistait à déterminer comment le client et le serveur allaient communiquer entre eux. Le client et le serveur peuvent se trouver sur le même réseau local, mais le client pourrait également communiquer avec le serveur via Internet. Le protocole de transport doit donc être adapté aussi bien aux environnements de réseau local qu'à Internet.

As I mentioned earlier, technologies such as DCOM, CORBA, and Java RMI are ill suited for supporting communication between the client and the server over the Internet. Protocols such as Hypertext Transfer Protocol (HTTP) and Simple Mail Transfer Protocol (SMTP) are proven Internet protocols. HTTP defines a request/response messaging pattern for submitting a request and getting an associated response. SMTP defines a routable messaging protocol for asynchronous communication. Let’s examine why HTTP and SMTP are well suited for the Internet.

HTTP-based Web applications are inherently stateless. They do not rely on a continuous connection between the client and the server. This makes HTTP an ideal protocol for high-availability configurations such as firewalls. If the server that handled the client’s original request becomes unavailable, subsequent requests can be automatically routed to another server without the client knowing or caring.

Almost all companies have an infrastructure in place that supports SMTP. SMTP is well suited for asynchronous communication. If service is disrupted, the e-mail infrastructure automatically handles retries. Unlike with HTTP, you can pass SMTP messages to a local mail server that will attempt to deliver the mail message on your behalf.

The other significant advantage of both HTTP and SMTP is their pervasiveness. Employees have come to rely on both e-mail and their Web browsers, and network administrators have a high comfort level supporting these services. Technologies such as network address translation (NAT) and proxy servers provide a way to access the Internet via HTTP from within otherwise isolated corporate LANs. Administrators will often expose an SMTP server that resides inside the firewall. Messages posted to this server will then be routed to their final destination via the Internet.

In the case of credit card processing software, an immediate response is needed from the merchant bank to determine whether the order should be submitted to the ERP system. HTTP, with its request/response message pattern, is well suited to this task.

Most ERP software packages are not capable of handling large volumes of orders that can potentially be driven from the e-commerce application. In addition, it is not imperative that the orders be submitted to the ERP system in real time. Therefore, SMTP can be leveraged to queue orders so that they can be processed serially by the ERP system.

If the ERP system supports distributed transactions, another option is to leverage Microsoft Message Queue Server (MSMQ). As long as the e-commerce application and the ERP system reside within the same LAN, connectivity via non-Internet protocols is less of an issue. The advantage MSMQ has over SMTP is that messages can be placed and removed from the queue within the scope of a transaction. If an attempt to process a message that was pulled off the queue fails, the message will automatically be placed back in the queue when the transaction aborts.

Choosing an Encoding Scheme

HTTP and SMTP provide a means of sending data between the client and the server. However, neither specifies how the data within the body of the message should be encoded. Microsoft needed a standard, platform-neutral way to encode data exchanged between the client and the server.

Because the goal was to leverage Internet-based protocols, Extensible Markup Language (XML) was the natural choice. XML offers many advantages, including cross-platform support, a common type system, and support for industry -standard character sets.

Binary encoding schemes such as those used by DCOM, CORBA, and Java RMI must address compatibility issues between different hardware platforms. For example, different hardware platforms have different internal binary representation of multi-byte numbers. Intel platforms order the bytes of a multi-byte number using the little endian convention; many RISC processors order the bytes of a multi-byte number using the big endian convention.

XML avoids binary encoding issues because it uses a text-based encoding scheme that leverages standard character sets. Also, some transport protocols, such as SMTP, can contain only text-based messages.

Binary methods of encoding, such as those used by DCOM and CORBA, are cumbersome and require a supporting infrastructure to abstract the developer from the details. XML is much lighter weight and easier to handle because it can be created and consumed using standard text-parsing techniques.

In addition, a variety of XML parsers are available to further simplify the creation and consumption of XML documents on practically every modern platform. XML is lightweight and has excellent tool support, so XML encoding allows incredible reach because practically any client on any platform can communicate with your Web service.

Choosing a Formatting Convention

It is often necessary to include additional metadata with the body of the message. For example, you might want to include information about the type of services that a Web service needs to provide in order to fulfill your request, such as enlisting in a transaction or routing information. XML provides no mechanism for differentiating the body of the message from its associated data.

Transport protocols such as HTTP provide an extensible mechanism for header data, but some data associated with the message might not be specific to the transport protocol. For example, the client might send a message that needs to be routed to multiple destinations, potentially over different transport protocols. If the routing information were placed into an HTTP header, it would have to be translated before being sent to the next intermediary over another transport protocol, such as SMTP. Because the routing information is specific to the message and not the transport protocol, it should be a part of the message.

Simple Object Access Protocol (SOAP) provides a protocol-agnostic means of associating header information with the body of the message. Every SOAP message must define an envelope. The envelope has a body that contains the payload of the message and a header that can contain metadata associated with the message.

SOAP imposes no restrictions on how the message body can be formatted. This is a potential concern because without a consistent way of encoding the data, it is difficult to develop a toolset that abstracts you from the underlying protocols. You might have to spend a fair amount of time getting up to speed on the Web service’s interface instead of solving the business problem at hand.

What was needed was a standard way of formatting a remote procedure call (RPC) message and encoding its list of parameters. This is exactly what Section 7 of the SOAP specification provides. It describes a standard naming convention and encoding style for procedure-oriented messages.

Because SOAP provides a standard format for serializing data into an XML message, platforms such as ASP.NET and Remoting can abstract away the details for you.

Choosing Description Mechanisms

SOAP provides a standard way of formatting messages exchanged between the Web service and the client. However, the client needs additional information in order to properly serialize the request and interpret the response. XML Schema provides a means of creating schemas that can be used to describe the contents of a message.

XML Schema provides a core set of built-in datatypes that can be used to describe the contents of a message. You can also create your own datatypes. For example, the merchant bank can create a complex datatype to describe the content and structure of the body of a message used to submit a credit card payment request.

A schema contains a set of datatype and element definitions. A Web service uses the schema not only to communicate the type of data that is expected to be within a message but also to validate incoming and outgoing messages.

A schema alone does not provide enough information to effectively describe a Web service, however. The schema does not describe the message patterns between the client and the server. For example, a client needs to know whether to expect a response when an order is posted to the ERP system. A client also needs to know over what transport protocol the Web service expects to receive requests. Finally, the client needs to know the address where the Web service can be reached.

This information is provided by a Web Services Description Language (WSDL) document. WSDL is an XML document that fully describes a particular Web service. Tools such as ASP.NET WSDL.exe and Remoting SOAPSUDS.exe can consume WSDL and automatically build proxies for the developer.

As with any component used to build software, a Web service should also be accompanied by written documentation for developers who program against the Web service. The documentation should describe what the Web service does, the interfaces it exposes, and some examples of how to use it. Good documentation is especially important if the Web service is exposed to clients over the Internet.

Choosing Discovery Mechanisms

Once you’ve developed and documented a Web service, how can potential clients locate it? If the Web service is designed to be consumed by a member of your development team, your approach can be pretty informal, such as sharing the URL of the WSDL document with your peer a couple of cubicles down. But when potential clients are on the Internet, advertising your Web service effectively is an entirely different story.

What’s needed is a common way to advertise Web services. Universal Description, Discovery, and Integration (UDDI) provides just such a mechanism. UDDI is an industry-standard centralized directory service that can be used to advertise and locate Web services. UDDI allows users to search for Web services using a host of search criteria, including company name, category, and type of Web service.

Web services can also be advertised via DISCO, a proprietary XML document format defined by Microsoft that allows Web sites to advertise the services they expose. DISCO defines a simple protocol for facilitating a hyperlink style for locating resources. The primary consumer of DISCO is Microsoft Visual Studio.NET. A developer can target a particular Web server and navigate through the various Web services exposed by the server.

What’s Missing from Web Services?

You might have noticed that some key items found within a distributed component infrastructure are not defined by Web services. Two of the more noticeable omissions are a well-defined API for creating and consuming Web services and a set of component services, such as support for distributed transactions. Let’s discuss each of these missing pieces.

  • Web service -specific API Most distributed component infrastructures define an API to perform such tasks as initializing the runtime, creating an instance of a component, and reflecting the metadata used to describe the component. Because most high-level programming languages provide some degree of interoperability with C, the API is usually exposed as a flat set of C method signatures. RMI goes so far as to tightly couple its API with a single high-level language, Java.

In an effort to ensure that Web services are programming language-agnostic, Microsoft has left it up to individual software vendors to bind support for Web services to a particular platform. I will discuss two Web service implementations for the.NET platform, ASP.NET and Remoting, later in the book.

  • Component services The Web services platform does not provide many of the services commonly found in distributed component infrastructures, such as remote object lifetime management, object pooling, and support for distributed transactions. These services are left up to the distributed component infrastructure to implement.

Some services, such as support for distributed transactions, can be introduced later as the technology matures. Others, such as object pooling and possibly object lifetime management, can be considered an implementation detail of the platform. For example, Remoting defines extensions to provide support for object lifetime management, and Microsoft Component Services provides support for object pooling.

Summary

Component-based programming has proven to be a boon to developer productivity, but some services cannot be encapsulated by a component that resides within the client’s datacenter. Legacy technologies such as DCOM, CORBA, and Java RMI are ill-suited to allowing clients to access services over the Internet, so Microsoft found it necessary to start from the bottom and build an industry-standard way of accessing remote services.

Services Web is an umbrella term that describes a collection of industry- standard protocols and services used to facilitate a base-line level of interoperability between applications. The industry support that Web services has received is unprecedented. Never before have so many leading technology companies stepped up to support a standard that facilitates interoperability between applications, regardless of the platform on which they are run.

One of the contributing factors to the success of Web services is that they’re built on existing Internet standards such as XML and HTTP. As a result, any system capable of parsing text and communicating via a standard Internet transport protocol can communicate with a Web service. Companies can also leverage the investment they have already made in these technologies.

Tout le monde sait que disposer d'un serveur SMTP fiable est la clé pour que votre courrier électronique soit distribué correctement. Il est également bien connu que PERSONNE ne propose plus de serveur SMTP sans authentification ou pour un relais ouvert. MAIS VOUS POUVEZ TOUJOURS OBTENIR UN SERVEUR SMTP DE HAUTE QUALITÉ GRATUITEMENT POUR VOTRE USAGE !

Cliquez ici pour obtenir votre SERVEUR SMTP GRATUIT