VC 2010 使用GSOAP調用C#寫的WEBSERVICE


一、環境:

1、VS2010 sp1

2、GSOAP 2.8.11 ,http://sourceforge.net/projects/gsoap2/

3、WIN8 IIS


二、實現

用C#寫個WEB SERVICE發佈到本機,應用程序名爲SRV

wsdl爲http://localhost/srv/srv.asmx?wsdl


gsoap主要的應用程序分爲兩個:wsdl2h和soapcpp2。

wsdl2h是將wsdl定義轉換成.h文件的工具。主要有一些選項:

-c代表轉化成C代碼。

-s代表不使用STL,取而代之需要在工程中包含stdsoap2.h和stdsoap2.cpp。這些在安裝的源碼中都可以找到。

-o file代表指定輸出文件名稱。

通常情況下使用命令wsdl2h –s xxx.wsdl即可生成想要的.h文件。


在這裏我使用的命令是:

意思是使用定義模板typemap.dat,並且不使用STL生成testClient.h

typemap.dat是GSOAP自帶的複製過來增加了以下內容

xsd__string = | wchar_t* 

因爲默認GSOAP生成的C++代碼都是ANSI的,而C#默認是用UTF的,所以最好轉換成wchar_t這樣兼容性好些,避免中文亂碼。


然後是要生成WEBSERVICE調用代碼

沒有特殊選項的情況下,gsoap不需要依賴其他的鏈接庫。soapcpp2的主要選項有:

-S代表生成客戶端代碼。

-C代表生成服務端代碼。

-L代表不生成soapClientLib/soapServerLib

-c代表僅生成c代碼

-i代表使用Proxy

-x 不生成xml文件


我使用的是命令是:



OK,現在可以把調用代碼COPY到VC2010項目裏測試效果了。

總共需要把這麼多文件COPY過去


因爲我們沒有使用STL,所以需要包含stdsoap2.h和stdsoap2.cpp,這兩個文件在GSOAP裏可以找到。


設置以上新加的所有.cpp文件不要使用預編譯頭



最後調用代碼

要先

#include "soapSrvSoapProxy.h"
#include "srvsoap.nsmap"

   const char* server="http://localhost/srv/srv.asmx";
		SrvSoapProxy ss(server,SOAP_C_UTFSTRING);
		


	 _tempuri__HelloWorld hw;
	 _tempuri__HelloWorldResponse hwp;
	
	 if(ss.HelloWorld(&hw,&hwp)==SOAP_OK)
	{
		
		AfxMessageBox(hwp.HelloWorldResult);
	}
	else
		AfxMessageBox(L"error");


發佈了212 篇原創文章 · 獲贊 7 · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章