C++程序中調用WebService的實現


前言

       因為最近的項目中需要運用到在MFC程序中調用WebService里面集成好了的函數,所以特意花了一天的時間來研究WebService的構建以及如何在MFC的程序中添加Web引用,進而來實現在C++ MFC中調用那些WebService中寫好的函數,中間也是遇到了一些不懂和不解的地方,好在通過度娘上的一些資料和自己的研究逐一的解決了,寫這篇文章的主要目的是,第一:讓自己記得更清楚,也方便以后不記得了可以及時回想起來。第二:讓其他的一些和我碰到一樣問題的朋友能更好的解決此問題。內容僅供參考,如有不對之處希望大家提出來一起交流。

第一部分:WebService的創建

首先,打開VS2005,“File->New->Project|Visual C#|ASP.NET Web Service Application”,新建一個名稱為“MyWebService”的應用程序。
 
接下來,你可以在新建的工程文件中修改代碼,你可以將[WebService(Namespace = "http://tempuri.org/")]中的tempuri.org改為你的IP地址或域名地址目錄,你也可以在類里面添加新的代碼,如下所示。
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;

namespace MyWebService
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://192.168.22.36/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod(Description = "Default Function")]
        public string HelloWorld()
        {
            return "Hello World";
        }
        // 新添加的方法
        [WebMethod(Description = "My Sample Function")]
        public int Sum(int a, int b)
        {
            return a+b;
        }
    }
}

接下來,你可以debug運行一下你現在的程序,可以看到現在的效果是這樣的。

點擊"Sum"超鏈接,跳轉到下一個頁面。

在編輯框中輸入a = 10,b = 100,點擊調用,就可以看到XML格式返回的WebService結果。

到這里,就說明我們的Web Service的環境沒有問題。接下來,我們要做的就是把我們建立好的Web Service發布到iis服務器上去。

第二部分:WebService的發布

首先,你可以在你自己的桌面新建一個文件夾(SampleWebService),這里有一個地方需要注意,我們需要右鍵點擊文件夾屬性,選擇安全tab頁,在安全頁下面點擊“編輯”,然后在彈出的頁面里面添加EveryOne的組或用戶名(EveryOne的SYSTEM的權限全部勾選允許)。
 
設定完后的圖片如下:
 
然后,進入到你第一步過程中新建好的WebService程序,選擇Release編譯環境,在“Solution Explorer”下面選擇你的WebService程序“MyWebService”,點擊右鍵選擇“Publish“,彈出“Publish Web”對話框,在彈出的對話框中設置”Target Location“為你剛才新建的文件夾”SampleWebService“的路徑,點擊”Publish“按鈕,如下圖所示。
 
接下來,我們來到”Internet信息服務(IIS)管理器“,點擊網站右鍵選擇“添加網站”,在彈出的”添加網站“對話框中設置“網站名稱”為SampleWebSite,物理路徑為我們上面新建的文件夾的路徑(也就是C:\Users\Administrator\Desktop\SampleWebService),“端口號”為避免重復,我們可以把它修改為8081,點擊”確定“按鈕,如下圖所示。
 
接下來,我們雙擊”Sample Website主頁”下面的“目錄瀏覽”,點擊啟用。
 
接下來,我們來到“應用程序池”,選中我們新建號的應用程序池“SampleWebSite”,點擊右鍵選中“高級設置”,在彈出的高級設置對話框中將“啟用32位應用程序”設置為True。
 
到這里,我們的WebService就發布完成了。你可以點擊iis管理器右手邊的“瀏覽網站”下面的“瀏覽*:8081(http)”來看一下你的WebService是否發布成功,發布成功的話會顯示如下頁面。

第三部分:調用WebService

首先,我們新建一個Win32應用程序“Sample”。然后進入應用程序,在“Solution Explorer”下面選擇你的Win32應用程序“Sample”,點擊右鍵選擇“Add Web Reference“,彈出“Add Web Reference”對話框,在彈出的對話框中設置”URL“為我們在第二部分中發布的鏈接“http://localhost:8081/Service1.asmx”,設置“Web reference name”為SampleRefer,點擊”Add Reference“按鈕,如下圖所示。
 
執行完這步以后,我們可以看到應用程序中多出來了幾個文件。
 
接下來,我們在Sample.cpp中添加如下代碼。
#include "stdafx.h"
#include <stdio.h>
#include "WebService.h"

using namespace Service1;

int _tmain(int argc, _TCHAR* argv[])
{
	// 初始化com組件運行環境
	::CoInitialize(NULL);
	// 如果第八行沒有命名空間Service1
	// 這里可以寫成Service1::CService1 ws
	CService1 ws;
	int nNum1 = 10;
	int nNum2 = 100;
	int nSum = 0;
	HRESULT hr = ws.Sum(nNum1, nNum2, &nSum);

	printf("The Sum of the two num is:%d\n",nSum);
	getchar();

	return 0;
}
 
運行程序,我們可以得到下面的結果。
 

總結

至此,我們的C++程序中調用WebService的整個實現過程都介紹完畢,對於MFC的應用程序,和Win32的應用程序的實現代碼沒有什么區別,這里我們就不多做介紹。對於我來說,過程中主要遇到的問題主要還是在WebService發布到iis上時的一些環境的配置不是很准確,例如發布的時候我們必須Release編譯環境,必須設置Everyone的權限等。還有就是寫代碼的時候不是像我們調用類里面的函數一樣去調用WebService中的函數,我們要做一個com組件的初始化,為了方便要定義命名空間,調用的函數有一個HRESULT類型的返回值等等。最后還是希望大家可以相互學習吧,有什么不對的地方一起討論。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM