Est-il possible de développer des services Web en C++ ?

| Microsoft MSDN France | Jérôme Lambert |

Retrouvez l'intégralité des questions/réponses sur le développement sous Windows 7 dans l'article suivant.

Commentez cet article : Commentez ♪

- Titre : Est-il possible de développer des services Web en C++ ?

- Auteurs : Microsoft MSDN France, Jérôme Lambert

- Parution : 21 février 2010

- Licence : Copyright ® 2011 Microsoft MSDN France. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Est-il possible de développer des services Web en C++ ?

I - Est-il possible de développer des services Web en C++ ?

Une nouvelle API est disponible avec Windows, WWSAPI (Windows Web Service API) qui permet aux développeurs natifs (C/C++) d'implémenter :

- des clients ou des services Web sans adhérence avec la plate-forme .NET ;

- interopérer avec les standards des services Web, WCF, Web Services ASP.NET et même d'autres services qui tournent sur des systèmes d'exploitation autres que Windows.

Pour créer un client à un service Web, dans un premier temps, il faut obtenir ses métadonnées à l'aide de l'outil svcutil.exe.

svcutil /t:metadata <point d'entrée du service web>

Des fichiers wsdl et wsd contenant les métadonnées du service sont créés.

Ensuite il faut créer le proxy client à l'aide de l'outil wsutil.exe

wsutil.exe *.wsdl *.xsd

Sont alors créés, des fichiers d'entête (.H) contenant la structure des messages à envoyer et du code source (.C) contenant les appels de méthodes du service. Ces deux derniers fichiers seront à inclure dans votre projet.

Par exemple, pour initialiser un proxy web en C++ avec WWSAPI.

WS_ERROR* _wsError;
WS_HEAP* _wsHeap;
WS_SERVICE_PROXY* _wsServiceProxy;

HRESULT hr;
hr=WsCreateError (NULL,0,&_wsError);
if (FAILED(hr)) return hr;
hr=WsCreateHeap (SIZE_T_MAX,0,NULL,0,&_wsHeap,_wsError);
if (FAILED(hr))
{
LibererRessourcesServiceWeb();
return hr;
}
WS_HTTP_BINDING_TEMPLATE templateValue={};

hr=LiveSearchPortBinding_CreateServiceProxy (
&templateValue,
NULL,0,
&_wsServiceProxy,
_wsError);

if (FAILED(hr))
{
LibererRessourcesServiceWeb();
return hr;
}

WS_ENDPOINT_ADDRESS address={};
WS_STRING Url=WS_STRING_VALUE(L"http://api.search.live.net:80/soap.asmx");
address.url=Url;

hr=WsOpenServiceProxy (_wsServiceProxy ,&address,NULL,_wsError);

void LibererRessourcesServiceWeb ()
{
if (_wsError!=NULL)
WsFreeError (_wsError);
if (_wsHeap!=NULL)
WsFreeHeap (_wsHeap);
if (_wsServiceProxy !=NULL)
{
WsFreeServiceProxy (_wsServiceProxy);
}
}

Pour plus d'infos :

- Pour en savoir plus sur WWSAPI : http://msdn.microsoft.com/en-us/library/dd323309(v=VS.85).aspx

- Pour consommer les services de traduction et de synthèse vocale de Microsoft translator avec WWSAPI, suivez le guide : http://msdn.microsoft.com/fr-fr/windows/msdn.microsoft.translator.vcplus.aspx

- MSDN : http://msdn.microsoft.com/fr-fr/windows/default.aspx

- Le coach Windows 7 : http://msdn.microsoft.com/fr-fr/windows/msdn.coach.windows7

- Kit de développement pour Windows 7 : http://msdn.microsoft.com/fr-fr/windows/gg398052.aspx