S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

VC中的SOAP

Posted on 2009-10-19 16:40 S.l.e!ep.¢% 阅读(718) 评论(0)  编辑 收藏 引用 所属分类: SOAP
VC6开发Web   Services   客户端    
  下面是个控制台的样例  
  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"   \  
                          exclude("IStream",   "IErrorInfo",   "ISequentialStream",   "_LARGE_INTEGER",   \  
                                          "_ULARGE_INTEGER",   "tagSTATSTG",   "_FILETIME")  
  using   namespace   MSSOAPLib30;     //你机器得安装SOAP   Toolkit3.0   ,1.0时,用using   namespace时报错  
   
   
  void   Add()  
  {  
        ISoapSerializerPtr   Serializer;  
        ISoapReaderPtr   Reader;  
        ISoapConnectorPtr   Connector;  
        //   Connect   to   the   service.  
        Connector.CreateInstance(__uuidof(HttpConnector30));     //HttpConnector30   失败,无法这样创建Connector,CXX0017   Error   :Symbol   “HttpConnector30“   not   found(摇头、叹气!)  
        Connector->Property["EndPointURL"]   =   "http://MyServer/Soap3DocSamples/DocSample1/Server/DocSample1.wsdl";     //这个当然得改成您自己的拉  
        Connector->Connect();  
   
        //   Begin   the   message.  
        //Connector->Property["SoapAction"]   =   "uri:AddNumbers";  
        Connector->Property["SoapAction"]   =   "http://tempuri.org/DocSample1/action/Sample1.AddNumbers";  
        Connector->BeginMessage();  
   
        //   Create   the   SoapSerializer   object.  
        Serializer.CreateInstance(__uuidof(SoapSerializer30));  
   
        //   Connect   the   serializer   object   to   the   input   stream   of   the   connector   object.  
        Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));  
   
        //   Build   the   SOAP   Message.  
        Serializer->StartEnvelope("","","");  
        Serializer->StartBody("");  
        Serializer->StartElement("AddNumbers","http://tempuri.org/DocSample1/message/","","");     //这是本地的Web   Services,实际中要指定命名空间  
        Serializer->StartElement("NumberOne","","","");  
        Serializer->WriteString("5");  
        Serializer->EndElement();  
        Serializer->StartElement("NumberTwo","","","");  
        Serializer->WriteString("10");  
        Serializer->EndElement();  
        Serializer->EndElement();  
        Serializer->EndBody();  
        Serializer->EndEnvelope();  
         
        //   Send   the   message   to   the   XML   Web   service.  
        Connector->EndMessage();              
   
        //   Read   the   response.  
        Reader.CreateInstance(__uuidof(SoapReader30));  
   
        //   Connect   the   reader   to   the   output   stream   of   the   connector   object.  
        Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),   "");  
   
        //   Display   the   result.  
        printf("Answer:   %s\n",   (const   char*)Reader->RpcResult->text);  
           
  }  
   
  int   main()  
  {  
        CoInitialize(NULL);  
        Add();  
        CoUninitialize();  
        return   0;  
  }  
   
  更改   EndPointURL   属性的值.   在URL里指定你的服务器名.    
   
  OK  
   
  总结一下必要的关键步骤  
  1.导入类型库  
   
  2.需要创建一个SoapConnector  
   
  3.下一步创建SoapSerializer  
   
  4.下一步把消息附加到SoapConnector的输入流  
   
  5.下一步读取结果.要读取服务器的回复,客户端应用需要使用SoapReader,  
   
  6.SoapReader被连接到SoapConnector输出流  
   
  7.用IXMLDOMElement对象可以从SoapReader里读到服务器的回复  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理