65.9K
CodeProject 正在变化。 阅读更多。
Home

调用 Web 服务

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.39/5 (14投票s)

2003年6月1日

2分钟阅读

viewsIcon

167741

downloadIcon

1319

如何使用 Visual C++ .NET 调用 Web 服务

Invoking a Web services with .NET

引言

.NET 平台提供对调用 Web 服务的支持。 无需其他工具或 SDK。 该平台非常易于使用。

使用 .NET 调用 Web 服务

为了向您展示构建 Web 服务客户端应用程序是多么容易,我将引导您完成构建一个应用程序的各个阶段,该应用程序将在预定义的语言中翻译文本。 翻译将通过调用 Altavista "BabelFish"的 Web 服务来实现。 这个例子是用 Visual Studio C++ .NET 2003 编写的。

首先,使用 MFC 应用程序模板创建一个新的 Visual C++ 项目,并在 MFC 应用程序向导中选择一个基于对话框的应用程序,然后按“完成”按钮。

修改新的对话框,使其具有一个 ComboBox 控件和 2 个 EditBox,如下所示。

dialog box to invoke BabelFish Web service

添加 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”,然后单击“刷新”或“转到”按钮。 您必须获得的结果必须与此类似

dialog box to invoke BabelFish Web service

现在点击“添加引用”按钮

通过在解决方案资源管理器视图中验证,您会注意到一个名为 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 服务的完整代码。

© . All rights reserved.