2009-04-02 6 views
0

J'appelle une méthode web à partir de C++. Le [webmthod] est défini comme suitAppel d'une méthode Web à partir de C++

[WebMethod] 
public string UploadFile(byte[] data) 

Voici comment je l'appelle en C++

static TCHAR hdrs[] = "Content-Type: application/x-www-form-urlencoded"; 
    static TCHAR frmdata[] = "data=temp.txt"; 
    HINTERNET hSession = InternetOpen("MyAgent",INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 
    HINTERNET hConnect = InternetConnect(hSession, "localhost", 
     INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1); 
    HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", "my/WebService.asmx/UploadFile", NULL, NULL, 0, 0, 1); 
    HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata)); 

Avec cela; Je reçois l'erreur suivante. System.ArgumentException: impossible de convertir temp.txt en System.Byte.

Alors, comment est-ce que je passe dans le frmdata [] pour qu'il puisse être converti en System.byte sur le webservice?

Merci!

Répondre

1

je fini par faire HTTP de C++ UPLOAD ..

1

Pour référence ultérieure: envisagez d'utiliser ATL Server. Vous pouvez trouver les derniers bits et plus d'informations sur www.codeplex.com/AtlServer (Microsoft a retiré ATL Server du dernier SDK 9.0 d'ATL et l'a déplacé vers codeplex), et MSDN: msdn.microsoft.com/en-us/library/exb5b09w (VS.80) .aspx

Pour C++, vous pouvez générer un fichier d'en-tête proxy qui enveloppe parfaitement tout ce dont vous avez besoin pour appeler la méthode web en utilisant du savon ATL et tout autre client SoL ATL souhaité (WinInet, WinHTTP, Soap Socket, etc.) qui gère tous les appels réseau. Pour générer ce fichier, vous pouvez utiliser l'outil sproxy.exe. Ensuite, l'appel de méthode web devient un simple appel de méthode de classe.

Référence: msdn.microsoft.com/en-us/library/994721ak(VS.80).aspx sProxy Outil: msdn.microsoft.com/en-us/library/ztta389h(VS.80).aspx Exemple d'appel WS: msdn.microsoft.com/en-us/library/ftdya1d6(VS.80).aspx

Questions connexes