VS c++ soap 获取WebServiece的错误记录 实质错误是errno的错误
来源:互联网 发布:linux fstable 编辑:程序博客网 时间:2024/05/17 23:37
在VS2015的开发环境,用添加web引用的方式获取webservice,第一次请求一个服务接口总是出错,然后运行了一段其他代码,再次请求这个接口就成功了。一直找原因,也没有找到。
问题出在解析服务反应头的"200 OK\r\n......."的码的转化上,获取的errorno的总是34的类型。
曾经以为是内存不足,泄露的问题,或者是这段内容解析不成功。但是单独摘出来放在新建的简单工程里面测试都通过。我后面就不得不扩大范围,后面把真个webservice的添加web引用,单独做了一个dll,让另一个简单项目调用,一直没有出错。
后面再测试一下其他内容,然后把项目中的这个功能代码去掉,专门调用dll的导出方法,再试试看是能不能成功吧。
检测出错的位置是在 atlhttp.inl的
emplate <class TSocketClass>inline typename CAtlHttpClientT<TSocketClass>::HTTP_RESPONSE_READ_STATUS CAtlHttpClientT<TSocketClass>::ReadHttpResponse() {。。。。。。// read from the socket until we have a complete set of headers.pBodyBegin = FindHeaderEnd(&pHeaderBegin);if (!pBodyBegin){if (!ReadSocket()){
。。。。。
// pBuffer better be pointing at the status code nowLPCSTR pEnd = NULL;if (*pBuffer >= '0' && *pBuffer <= '9'){// probably a good status codem_nStatus = strtol((LPSTR)pBuffer, (LPSTR*)&pEnd, 10);if (Checked::get_errno() == ERANGE)return NULL; // bad status code}
但是这里的strtol的转换的值是200,是不是会超出范围的。这让人很疑惑,是不是有内存泄露的其他问题。
后面经过几个测试:
1,将使用webservice的代码单独提出来放在一个新工程里面测试是成功的。但是使用动态库给导出这个方法,让原来的程序替换使用,结果还是出错。
2,将访问webservice的代码放在构造函数里面测试正确,放回原处就不行,于是将该方法逐个过程放置,最后在放在 一个看到_wtol的时候,突然觉察是这里出错了。
最终确认真正的错误是下面的代码
CString strSize = _T("5108983296");ULONGLONG m_ullMirrorSize = _wtol(strSize.GetBuffer());
验证
CString strSize = _T("5108983296");if (Checked::get_errno() == ERANGE)return ; // bad status codeULONGLONG m_ullMirrorSize = _wtol(strSize.GetBuffer()); if (Checked::get_errno() == ERANGE)return ; // bad status code
如果想修复这个errno让程序继续下去,可以这么做
Checked::set_errno(0);if (Checked::get_errno() == ERANGE)return ; // bad status code
阅读全文
0 0
- VS c++ soap 获取WebServiece的错误记录 实质错误是errno的错误
- errno的错误定义
- C调用Linux内核的错误errno
- errno的错误定义详解
- errno的一些错误定义
- errno的一些错误定义
- 【初学python】错误SSLError: [Errno 1] _ssl.c:504:的解决记录
- 弱智C的错误记录
- ERRNO错误
- C++:VS遇见的错误(持续)
- 用python发送QQ邮件遇到的错误记录(ssl.SSLError: [Errno 1] _ssl.c:504)
- 编译错误:errno undeclared的解决
- errno返回值的对应错误码
- errno返回值的对应错误码
- 编译错误:errno undeclared的解决
- 编译错误:errno undeclared的解决
- 嵌入式 errno的一些错误定义编辑
- Linux errno 各个错误的含义
- 平安科技18群
- 用Scholar one 投稿过程
- XRecyclerView 的简单使用
- redis数据类型
- 程序员常用网址收藏
- VS c++ soap 获取WebServiece的错误记录 实质错误是errno的错误
- Android app、process和task的区别
- 装了双系统之后,进不去U盘启动项,进不去PE系统
- viewpage+fragment
- Angular订单操作
- 扫雷小游戏
- C语言程序: 约瑟夫环
- socket阻塞与非阻塞,同步与异步、I/O模型
- 自定义控件图片圆形和边框