J'essaye d'écrire une application simple de preuve de concept de client de WCF Server + gSOAP en utilisant le protocole SOAP 1.2. Voici le code du serveur:WCF et gSOAP - code interopérable?
[ServiceContract(Namespace="http://test.com")]
public interface IService1
{
[OperationContract]
void HelloWorld();
}
[ServiceBehavior(Namespace = "http://test.com")]
public class Service1 : IService1
{
public void HelloWorld()
{
}
}
static void Main(string[] args)
{
var svc = new Service1();
Uri uri = new Uri("http://localhost:8201/Service1");
ServiceHost host = new ServiceHost(typeof(Service1), uri);
host.Description.Namespace = "http://test.com";
var binding = new WSHttpBinding() { Namespace = "http://test.com" };
ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(IService1), binding, uri);
endpoint.Behaviors.Add(new InlineXsdInWsdlBehavior());
host.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = true });
var mex = host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
host.Open();
Console.ReadLine();
}
Puis-je lancer un service et générer du code en utilisant les commandes suivantes:
wsdl2h.exe -gyf -t WS/WS-typemap.dat -o Service.h http://localhost:8201/Service1?wsdl WS/WS-Addressing05.xsd
soapcpp2.exe -C -L -w -x -i -2 Service.h -ID:\...\gsoap-2.7\gsoap\import
Je Compile suivants du code C++:
#include "soapWSHttpBinding_USCOREIService1Proxy.h"
#include "WSHttpBinding_USCOREIService1.nsmap"
#include "stdsoap2.h"
int _tmain(int argc, _TCHAR* argv[])
{
WSHttpBinding_USCOREIService1Proxy svc;
_ns1__HelloWorld req;
_ns1__HelloWorldResponse rsp;
int hr = svc.HelloWorld(&req, &rsp);
if (hr != SOAP_OK)
{
_tprintf(_T("Error: %i\n"), hr);
}
return 0;
}
et cela génère une erreur 8 (SOAP_MUSTUNDERSTAND). Est-ce que quelqu'un a déjà généré un lien entre WCF et gSOAP? Qu'est-ce que je fais mal?