调用 Web 服务






3.39/5 (14投票s)
2003年6月1日
2分钟阅读

167741

1319
如何使用 Visual C++ .NET 调用 Web 服务
引言
.NET 平台提供对调用 Web 服务的支持。 无需其他工具或 SDK。 该平台非常易于使用。
使用 .NET 调用 Web 服务
为了向您展示构建 Web 服务客户端应用程序是多么容易,我将引导您完成构建一个应用程序的各个阶段,该应用程序将在预定义的语言中翻译文本。 翻译将通过调用 Altavista "BabelFish"的 Web 服务来实现。 这个例子是用 Visual Studio C++ .NET 2003 编写的。
首先,使用 MFC 应用程序模板创建一个新的 Visual C++ 项目,并在 MFC 应用程序向导中选择一个基于对话框的应用程序,然后按“完成”按钮。
修改新的对话框,使其具有一个 ComboBox 控件和 2 个 EditBox,如下所示。
添加 3 个与每个控件关联的成员变量。
CComboBox m_ctlLang;
CString m_strSource;
CEdit m_ctlResult;
如果您使用了对话框“添加成员变量向导”,您应该在成员函数 DoDataExchange()
中看到以下代码。
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO1, m_ctlLang);
DDX_Text(pDX, IDC_EDIT1, m_strSource);
DDX_Control(pDX, IDC_EDIT2, m_ctlResult);
有必要以以下方式在成员函数 OnInitDialog()
中初始化控件 ComboBox
// TODO: Add extra initialization here
// Add translation modes to the ComboBox
m_ctlLang.AddString("en_fr");
m_ctlLang.AddString("en_it");
m_ctlLang.AddString("en_de");
m_ctlLang.AddString("en_pt");
m_ctlLang.AddString("en_es");
m_ctlLang.AddString("fr_en");
m_ctlLang.AddString("it_en");
m_ctlLang.AddString("de_en");
m_ctlLang.AddString("pt_en");
m_ctlLang.AddString("es_en");
m_ctlLang.AddString("ru_en");
m_ctlLang.SetCurSel(0);
现在我们将把 Web 服务集成到我们的应用程序中。 我们在“项目”菜单中选择“添加 Web 引用...”选项。 在出现的对话框的字段中,键入以下 URL:“http://www.xmethods.net/sd/BabelFishService.ws dl”,然后单击“刷新”或“转到”按钮。 您必须获得的结果必须与此类似
现在点击“添加引用”按钮
通过在解决方案资源管理器视图中验证,您会注意到一个名为 WebService.h
的文件已添加到头文件中。 该文件包含一个类和所有描述 Web 服务的成员函数。
我们将添加到我们的项目中所有使用此服务的必需品。
第一步:在对话框的头文件中添加以下代码
#include "WebService.h"
using namespace BabelFishService;
然后在“Translate”按钮上创建一个事件处理程序,注释掉对函数 OnOK()
的调用,并编写以下代码
... // Initialize COM CoInitialize(NULL); // Create a pointer to Babel Fish Service CBabelFishService *fish = new CBabelFishService(); .../... // invoke Web Service HRESULT hr = fish->BabelFish(bstrMode,bstrSource,&bstrResult); if (FAILED(hr)) .../... else { // transfert response to a CString variable str = bstrResult; // copy texte translated to the EditBox m_ctlResult.SetWindowText((LPCSTR)str); } ... / ... // deleting the pointer to Babel Fish Service delete fish; // Uninitialize COM CoUninitialize(); .../...
参考
Web BabelFish 服务的详细功能描述在 www.xmethods.net 网站上。 你会发现很多其他有用的 Web 服务示例。
演示项目
演示项目包含调用我在本文中介绍的 BabelFish 服务的完整代码。