在VC中調用 WebService

一、什麼是 WebService ?

WebService 其實就是一個基於網絡的應用程序,它向外部程序提供一定的調用接口。外部(遠程)的程序,可以經由Web對其進行調用。

二、 WebService 的特性:

1.由於 WebService 經由web服務器發佈,所以比DCOM而言,可以順利穿過防火牆。這也是 WebService 的優點之一,可以說, WebService ,爲分佈 式應用的開發,提供了一個很好的平臺。

2.對 WebService 的調用,是通過SOAP協議進行的。簡單對象訪問協議(SOAP)提供了標準的遠程過程調用(RPC)方法來調用Web service。 而SOAP也是基於XML和XSD的,XML是SOAP的數據編碼方式,因此,對 WebService 的調用也可以是跨平臺的。、

三、怎樣調用 WebService ?

Visual Studio.NET 內建提供了對 WebService 的調用。在VC.NET中,調用 WebService 只需要簡單的幾個步驟即可。只要找到 WebService 的發佈 地址,將地址引入到VC工程中。這時,編譯器會預先編譯一次,自動生成和 WebService 相關的頭文件(也可以叫Web代理文件) WebService .h。 在你的程序中,包含 WebService .h然後生成相關的對象,就可以對遠程的 WebService 進行調用了。

爲演示怎樣調用 WebService ,我們用網上一個已經發布的 WebService ,名字叫TranslateService,其功能是對多種語言進行互相翻譯。 這個 WebService 的地址如下: http://www.WebServicex.net/TranslateService.asmx

四、程序示例

1.基於控制檯的託管程序示例

下面,我們先介紹VC.net中,基於控制檯的託管程序,調用 WebService 的例子:

啓動Visual Studio.NET 2003,新建一個Visual C++項目,類型選擇爲基於.NET的託管控制檯應用。然後,引入 WebService 到工程,在解決方案 的項目名稱上,單擊右鍵,選擇“添加Web引用”。如下圖(圖1):

圖1 添加 WebService 引用到工程中

填入 WebService 的地址,然後點擊”轉到”按鈕。 WebService 的相關細節,會被顯示在下面。Web引用名,可以採用默認的名字,也可以自己設置 一個,在這裏,我們起名叫TService。然後點擊“添加引用”(圖2),編譯器自動生成TService.h以及 WebService .h。在 WebService .h裏面已經包含了 TService.h。在工程的代碼中,我們直接包含頭文件 WebService .h即可。

圖2 添加 WebService

TService.h是由編譯器自動生成的,打開文件,我們可以看到,在命名空間TService中,編譯器爲我們自動封裝了一個叫TranslateService的託管 類,以及一個名字叫Language的枚舉類型。

Language類型在這個 WebService 中,用來描述翻譯語言的類型,比如:

EnglishTOChinese(英語到中文)

ChineseTOEnglish(中文到英語)

EnglishTOGerman (英語到德語)

EnglishTOFrench (英語到法語)

等等……

在測試程序中,我們選擇英語到中文的形式。
#include "stdafx.h"#include " WebService .h"//包含 WebService .h頭文件到程序中#using using namespace System;
using namespace TService;
//使用TService的命名空間int _tmain(){ String *str=new String(S"Hello,world!"); 
String *strResult; 
TranslateService *pService=new TranslateService; 
//建立遠程 WebService 對象 Language Lan=Language::EnglishTOChinese; 
//設置翻譯類型 strResult=pService->Translate(Lan,str);
//調用 WebService Console::WriteLine(str);
Console::WriteLine(strResult);
//輸出結果 return 0;}

程序結果如下:(圖3)

2.基於MFC的程序示例

在MFC程序中,一樣可以調用 WebService ,我們可以建立一個簡單的基於對話框的MFC程序,工程名字爲TranslateMFC。由於需要使用託管類型,所以 在編譯器設置裏面,需要打開/clr開關。(圖4)選擇項目—TranslateMFC屬性,打開項目的屬性頁,在常規,下面的使用託管擴展選項,將其選擇爲“是”。 這樣,我們的項目就支持託管了C++擴展了。

圖4 在工程屬性打開clr開關

和上一個例子的方法一樣,引用 WebService 到工程,創建 WebService 對象,然後調用 WebService 。不過在MFC中,我們如果直接用new來創建 WebService 對象的時候,編譯器會報錯(如下圖)這是爲什麼呢?

圖5 編譯產生的C3828錯誤

爲了跟蹤內存的使用情況,在 MFC 調試版本中使用時 MFC 重定義 new 運算符。由於此重定義的緣故,會在 MFC 應用程序中創建託管類的實例,從而導致錯誤。在將現有 MFC 代碼移植到公共語言運行庫時通常會發生這種情況。對於發佈版本不會發生該錯誤,這是因爲 MFC 不重定義 new 運算符。在以下示例中,放置在 .cpp 文件中的託管代碼創建 String 類的一個實例。這將導致在 MFC 應用程序調試版本中進行編譯時發生C3828編譯器錯誤。若要避免該錯誤,可在創建託管類型實例前,使用#undef 和 push_macro指令暫時取消定義 new 運算符。在最後一行託管代碼的後面,使用pop_macro 還原先前的 new 運算符定義。示例代碼如下:(圖6)

由於此 WebService 支持30多中語言類型的轉換,在這裏,爲示例簡單,我只保留了幾門語言的轉換功能。其他的語言,只需要判斷的時候,加入不同 Language枚舉類型即可。

下面是程序運行的結果演示:

圖7 MFC程序運行界面

圖7 英文翻譯爲中文

圖8 英文翻譯爲日文

圖9 英文翻譯爲法文

五、結束語

通過以上的例子,我們看到了 WebService 爲構建分佈式應用,提供了強大的功能支持。

更多的有關 WebService 的問題,請訪問http://www.microsoft.com/china/MSDN/library/ WebService s獲取更多的信息

補充:該程序的運行,需要.NET FrameWork的支持。 gigi_miao


轉自:http://tech.163.com/06/0428/09/2FPMSA1L00091LRC.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章