最近在学vc的soap编程,有些有关问题甚是不解,烦请各位同仁指教
最近在学vc的soap编程,有些问题甚是不解,烦请各位同仁指教
为了说明如何使用本篇文章中讨论的SOAP类,我们使用了http://www.xmethods.net/上列出的一项服务,该服务能够显示用户是否正在使用Yahoo Messenger。它只需要一个参数,即Yahoo用户的登录ID。返回的结果是一个布尔型值,0表示用户不在线,1表示用户在线。
我一直认为,学习某种编程技术的最好的方法就是实地学习源代码,在这里,我们就采取这种方法。下面是使用SOAP调用发现Yahoo用户是否在线的一个控制台应用程序的C++代码:
#include
#import "msxml3.dll "
using namespace MSXML2;
#import "C:\Program Files\Common Files\MSSoap\Binaries\MSSOAP1.dll " \
exclude( "IStream ", "ISequentialStream ", "_LARGE_INTEGER ", \
"_ULARGE_INTEGER ", "tagSTATSTG ", "_FILETIME ")
using namespace MSSOAPLib;
void main()
{
CoInitialize(NULL);
ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;
// 与Web服务连接
Connector.CreateInstance(__uuidof(HttpConnector));
Connector-> Property[ "EndPointURL "] = "http://www.allesta.net:51110/webservices/soapx4/isuseronline.php ";
Connector-> Connect();
// 开始消息
Connector-> Property[ "SoapAction "] = "uri:allesta-YahooUserPing ";
Connector-> BeginMessage();
// 创建SoapSerializer对象
Serializer.CreateInstance(__uuidof(SoapSerializer));
// 将serializer连接到connector的输入字符串
Serializer-> Init(_variant_t((IUnknown*)Connector->InputStream));
// 创建SOAP消息
Serializer-> startEnvelope( " ", " ", " ");
Serializer-> startBody( " ");
Serializer-> startElement( "isuseronline ", "uri:allesta-YahooUserPing ", " ", "m ");
Serializer-> startElement( "username ", " ", " ", " ");
Serializer-> writeString( "laghari78 ");
Serializer-> endElement();
Serializer-> endElement();
Serializer-> endBody();
Serializer-> endEnvelope();
// 将该消息发送给web服务
Connector-> EndMessage();
// 读取响应
Reader.CreateInstance(__uuidof(SoapReader));
// 将reader联接到connector的输出字符串
Reader-> Load(_variant_t((IUnknown*)Connector-> OutputStream), " ");
// 显示结果
printf( "Answer: %s\n ", (const char *)Reader-> RPCResult-> text);
CoUninitialize();
}
其中的开始消息
Connector-> Property[ "SoapAction "] = "uri:allesta-YahooUserPing ";
Connector-> BeginMessage();
中的SoapAction解释为HTTP头部中SoapAction中的值。这一属性只能从低级的API中设定,如果使用SoapClient接口中的ConnectorProperty属性(高级API)设置该属性,它就会被忽略。
不理解,假如要是把uri后面的内容换成别的该如何?
------解决方案--------------------
这是c\c++语法吗?-------Connector-> Property[ "SoapAction "]
见识短浅,不懂这是表达什么?
为了说明如何使用本篇文章中讨论的SOAP类,我们使用了http://www.xmethods.net/上列出的一项服务,该服务能够显示用户是否正在使用Yahoo Messenger。它只需要一个参数,即Yahoo用户的登录ID。返回的结果是一个布尔型值,0表示用户不在线,1表示用户在线。
我一直认为,学习某种编程技术的最好的方法就是实地学习源代码,在这里,我们就采取这种方法。下面是使用SOAP调用发现Yahoo用户是否在线的一个控制台应用程序的C++代码:
#include
#import "msxml3.dll "
using namespace MSXML2;
#import "C:\Program Files\Common Files\MSSoap\Binaries\MSSOAP1.dll " \
exclude( "IStream ", "ISequentialStream ", "_LARGE_INTEGER ", \
"_ULARGE_INTEGER ", "tagSTATSTG ", "_FILETIME ")
using namespace MSSOAPLib;
void main()
{
CoInitialize(NULL);
ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;
// 与Web服务连接
Connector.CreateInstance(__uuidof(HttpConnector));
Connector-> Property[ "EndPointURL "] = "http://www.allesta.net:51110/webservices/soapx4/isuseronline.php ";
Connector-> Connect();
// 开始消息
Connector-> Property[ "SoapAction "] = "uri:allesta-YahooUserPing ";
Connector-> BeginMessage();
// 创建SoapSerializer对象
Serializer.CreateInstance(__uuidof(SoapSerializer));
// 将serializer连接到connector的输入字符串
Serializer-> Init(_variant_t((IUnknown*)Connector->InputStream));
// 创建SOAP消息
Serializer-> startEnvelope( " ", " ", " ");
Serializer-> startBody( " ");
Serializer-> startElement( "isuseronline ", "uri:allesta-YahooUserPing ", " ", "m ");
Serializer-> startElement( "username ", " ", " ", " ");
Serializer-> writeString( "laghari78 ");
Serializer-> endElement();
Serializer-> endElement();
Serializer-> endBody();
Serializer-> endEnvelope();
// 将该消息发送给web服务
Connector-> EndMessage();
// 读取响应
Reader.CreateInstance(__uuidof(SoapReader));
// 将reader联接到connector的输出字符串
Reader-> Load(_variant_t((IUnknown*)Connector-> OutputStream), " ");
// 显示结果
printf( "Answer: %s\n ", (const char *)Reader-> RPCResult-> text);
CoUninitialize();
}
其中的开始消息
Connector-> Property[ "SoapAction "] = "uri:allesta-YahooUserPing ";
Connector-> BeginMessage();
中的SoapAction解释为HTTP头部中SoapAction中的值。这一属性只能从低级的API中设定,如果使用SoapClient接口中的ConnectorProperty属性(高级API)设置该属性,它就会被忽略。
不理解,假如要是把uri后面的内容换成别的该如何?
------解决方案--------------------
这是c\c++语法吗?-------Connector-> Property[ "SoapAction "]
见识短浅,不懂这是表达什么?