vc++ 调用web services
来源:互联网 发布:淘宝商品链接在哪 编辑:程序博客网 时间:2024/05/01 13:09
转自:http://blog.sina.com.cn/s/blog_5417413401008wos.html
下面是个控制台的样例
Toolkit3.0 终于给出VC6的样例了,1.0只能看到VB和ASP的
#include <stdio.h>
#import "msxml4.dll"
using namespace MSXML2;
#import "C:/Program Files/Common Files/MSSoap/Binaries/mssoap30.dll" /
using namespace MSSOAPLib30;
void Add()
{
}
int main()
{
}
更改 EndPointURL 属性的值. 在URL里指定你的服务器名.
OK
总结一下必要的关键步骤
1.导入类型库
2.需要创建一个SoapConnector
3.下一步创建SoapSerializer
4.下一步把消息附加到SoapConnector的输入流
5.下一步读取结果.要读取服务器的回复,客户端应用需要使用SoapReader,
6.SoapReader被连接到SoapConnector输出流
7.用IXMLDOMElement对象可以从SoapReader里读到服务器的回复
vc7.0 调用web services
//somehow the soap header dose not work now.
remember invoke Coinitialize(NULL)
add web services by right click the project and select add web reference.
CoInitialize(NULL); //initialize the com
CMemberServices *ms = new CMemberServices();;
int i;
DiskUsageInfo *_disk;
HRESULT hr;
CString username = "FZ566591079";
CString password = "1705649467";
CComBSTR bUserName, bPassword;
bUserName = username.AllocSysString();
bPassword = password.AllocSysString();
hr = ms->GetDiskUsage3(bUserName, bPassword, &_disk, &i);
if (FAILED(hr))
{
printf("Something happened when you call web services!");
}
else
{
printf("There are %d results returned", i);
}
::SysFreeString(bUserName);
::SysFreeString(bPassword);
delete ms;
return 0;
http://www.lokad.com/web-services-time-series-forecasting-tutorial-cpp.ashx
http://blog.tulipmm.cn/category/code/
ATL调用WebService倒是很简单,添加Web引用,好多代码就自动生成了。但是实际使用的时候遇到了一些问题:无论调用多少次Login,在调用其它方法的时候,服务器端查询Session总是为null。
还好我对Session机制也算了解,初步判断是客户端调用的时候并没有把Cookie内容放在HttpHeaders里面发回服务器——ATL类库并没有提供这样的实现。有两种方法可以解决这个问题:
1、修改WebService接口:在Login成功后返回SessionID到客户端,客户端每次调用后续方法的时候都在WebService方法的参数中传递这个SessionID;服务器端通过SessionID查找Session。这样的话就要现有的WebService就不能使用了,需要修改WebService增加新的方法,显然不是一个很好的解决办法。
2、修改客户端ATL类,使它可以保存Cookie。这样Web服务代码不需要修改,不会影响现有的其他客户端使用。
权衡得失,决定修权衡得失,决定修改ATL代码。研究发现添加Web引用后自动生成这样的代码
马上写了一个CAtlHttpClientT的子类重写这两个方法:
template <class TSocketClass>
class CCookieEnabledHttpClient
public CAtlHttpClientT<TSocketClass>
{
public:
CCookieEnabledHttpClient
{
}
public:
CString m_strCookies;
public:
bool Navigate(
const CUrl *pUrl,
ATL_NAVIGATE_DATA *pData
) throw(...)
{
CAtlNavigateData navData(*pData);
CString strHeaders = pData->szExtraHeaders;
strHeaders.Format(_T("%sCookie:%s/r/n"), strHeaders, m_strCookies);
navData.SetExtraHeaders(strHeaders);
return CAtlHttpClientT<TSocketClass>::Navigate(pUrl, &navData);
}
void OnSetCookie(LPCTSTR lpszStr) throw()
{
m_strCookies = lpszStr;
return;
}
};
- vc++ 调用web services
- VC++调用天气预报Web services方法
- VC++6.0调用Web Services(转)
- 在VC++6.0中调用Web Services的方法
- vc 6.0 web services
- vc 6.0 web services
- web services 调用
- 底层调用 Web Services
- web services客户端调用
- 用JavaScript调用Web Services
- C#和Web Services调用。
- JAVA动态调用Web Services
- oracle直接调用web services
- oracle直接调用web services
- oracle直接调用web services
- Web Services服务之间调用
- C++动态调用Web Services
- Android中调用Web Services
- C#的多线程机制探索
- Spring中常用的hql查询方法(getHibernateTemplate())
- 开放源代码的软件测试工具
- 打开 linux 防火墙端口
- JAVA的可变类与不可变类
- vc++ 调用web services
- linux 服务器mysql已经配置好,远程连接不上(已解决)
- Delphi传IP到NetMetting
- Spring中常用的操作数据库的(Dao)方法
- 中国经济这轮严冬到底有多重 ,有多长?(为什么说拉动消费性内需是个伪命题?)
- 深入解析MFC -- CString的内存结构
- igb 在 sles 10.1下的安装
- nokia 使用技巧
- 第二天 HellowWorld