首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC.NET 呼叫 WebService 完整實戰 (主控台與 MFC)

     編輯:關於VC++

WebService 簡介

WebService 是基於 HTTP/SOAP/XML 的跨平台、跨語言遠端呼叫技術。優勢:

  • 穿透防火牆 (HTTP 80/443 埠)
  • 標準化介面 (WSDL 描述,SOAP 封裝)
  • 異構系統整合首選 (Java/.NET/C++/Python 互通)

Visual Studio .NET 2003 內建支援流程

  1. 取得 WebService 發布位址 (如 https://www.webservicex.net/TranslateService.asmx)
  2. 方案總管專案右鍵 → Add Web Reference → 輸入位址 → Go → 設定參考名稱 (如 TService) → Add Reference
  3. IDE 自動產生 Proxy 類別 (TService.h, WebService.h),封裝 SOAP 序列化/反序列化。
  4. 程式碼 #include "WebService.h" 即可使用強型別 Proxy 物件呼叫遠端方法。

範例服務:TranslateService

  • 功能:多國語言互譯
  • 方法:Translate(Language lang, String* text)
  • 枚舉 Language:EnglishTOChinese, ChineseTOEnglish, EnglishTOGerman, EnglishTOFrench … 30+ 種

案例一:Managed Console Application

#include "stdafx.h"
#include "WebService.h" // 自動產生的 Proxy 標頭
#using 
using namespace System;
using namespace TService; // Web Reference 命名空間

int _tmain()
{
    String* str = S"Hello, world!";
    String* result;

    TranslateService* svc = new TranslateService; // Proxy 物件
    Language lang = Language::EnglishTOChinese;
    result = svc->Translate(lang, str); // 同步呼叫,內部發送 SOAP HTTP POST

    Console::WriteLine(S"原文: {0}", str);
    Console::WriteLine(S"譯文: {0}", result);
    return 0;
}

案例二:MFC Dialog Application (關鍵:/clr 與 new 運算子衝突)

專案設定

  1. 專案屬性 → Configuration Properties → General → Use Managed Extensions: Yes (/clr)
  2. 同樣 Add Web Reference 產生 Proxy。

編譯錯誤 C3828 原因與解決

MFC Debug 版重新定義 new 運算子以追蹤記憶體洩漏,導致無法配置 Managed 物件 (gcnew/new for ref class)。

解法:在 Managed 程式碼區段暫時取消 new 宏定義:

// TranslateDlg.cpp
#include "WebService.h"
using namespace TService;

#pragma push_macro("new")
#undef new // 取消 MFC new 宏

void CTranslateDlg::OnBtnTranslate()
{
    UpdateData(TRUE);
    String* input = m_strInput; // CString 隱含轉換
    String* output;

    TranslateService* svc = new TranslateService;
    Language lang = (Language)m_comboLang.GetCurSel(); // 對應枚舉
    output = svc->Translate(lang, input);

    m_strOutput = output; // 回填
    UpdateData(FALSE);
}

#pragma pop_macro("new") // 恢復 MFC new 宏

注意:Release 版不重定義 new,無此問題;但為保險建議統一加上 #pragma push/pop_macro。

介面操作

下拉選單選語言對 (英→中/日/法/德…),輸入英文,點擊翻譯,顯示結果。

部署需求

  • 目標機器需安裝 .NET Framework 1.1 (對應 VS.NET 2003)。
  • Proxy 類別為 Managed Code,呼叫端專案必須編譯為 /clr。
  • 網路需可連線 WebService 伺服器 (HTTP/HTTPS)。

進階主題

  • 非同步呼叫:BeginTranslate/EndTranslate 配合回呼,避免 UI 凍結。
  • 複雜型別:自訂結構/陣列/資料集在 WSDL 中定義,Proxy 自動對應 Managed 類別。
  • 安全性:WS-Security、HTTPS、客戶端憑證驗證。
  • WSE / WCF 遷移:新專案建議直接使用 WCF (svcutil.exe 產生 Proxy)。

完整原始碼 (Console + MFC 兩專案) 可下載參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved