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.
  • Inter-opé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.

 
Sélectionnez
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

 
Sélectionnez
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.

 
Sélectionnez
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 :