从 MFC(非托管)应用程序调用 WebService(托管 C# WebService),并使用 Cookie 容器保留会话。
本文涉及通过保留会话(使用 Cookie 容器)
引言
本文介绍如何从 MFC(非托管)应用程序调用 WebService(托管 C# WebService),并使用 Cookie 容器保留会话。
描述
本文涉及以下因素
- 从 MFC 应用程序调用托管 WebService。
解决方案:创建一个基于 MFC 对话框的应用程序,例如FirstWebServiceClientDlg
。
在添加 WebService 之前,您需要更改项目的设置。
右键单击解决方案资源管理器,然后单击“属性”。- 常规 - 使用托管扩展 = 是
- C/C++ - 常规 - 调试信息格式 = 程序数据库 (/Zi)
- C/C++ - 常规 - 编译为托管 = 程序集支持 (/clr)
- C/C++ - 代码生成 - 启用最小重新生成 = 否
- C/C++ - 代码生成 - 基本运行时检查 = 默认
现在您可以添加 WebService 了。右键单击解决方案资源管理器 -> 添加 WebService
-> 在对话框中,输入 https:///firstwebservice/firstwebservice.asmx,然后单击“添加引用”按钮。
[注意:您需要使包含示例代码的 Firstwebservice 文件夹具有 Web 共享权限。]
VC.NET 会自动添加一个头文件(webservice.h)、一个 .cs 文件和一个 DLL。为了调用您的 WebService,您只需包含 webservice.h。
- 在非托管类中将托管 C++ 对象作为成员变量。
解决方案
include<vcclr.h> //Add in the dialog Class //Check FirstwebServiceClient.h gcroot<webserviceobject*> m_pWebServiceObject;
- 像在 C# 中一样使用 cookiescontainer 对象
解决方案
using namespace System::Net; // And Add in the dialog Class //Check FirstwebServiceClient.h gcroot<CookieContainer*> m_pCookies ; //CookiesContainer is used Enable Session. In the Sample Code
示例代码说明
有两个文件夹
FirstWebServiceClient
是一个 MFC 项目FirstWebService
是一个 C# 项目,用于创建WebService
webService
包含两种方法 - 一种用于设置值,另一种用于添加值
将此文件夹设置为 WebSharing
(名称 FirstwebService
)。
设置值,创建两个会话变量来存储值。将值添加到先前存储的值。
客户端代码
在客户端调用 SetValue
之前,您需要启用 Cookie。
void CFirstWebServiceClientDlg::OnBnClickedButtonSetval()
{
UpdateData(TRUE);
m_pWebService->CookieContainer = m_pCookies;
m_pWebService->SetValues(m_oNum1,m_oNum2);
AfxMessageBox("Now Press Add Button")
}
然后按“添加”按钮。您将获得正确答案。
Just Comment line
//m_pWebService->CookieContainer = m_pCookies;
然后按“添加”按钮,并比较结果。
区别在于,每次发送 Web 请求时,它都被视为一个单独的请求。为了保留先前的值,请使用启用会话。
历史
- 2004 年 9 月 12 日:初始发布