CPP-网络/通信:WebService

工具:vc2003

 1 //引入相关头文件,连接动态库,定义全局变量。
 2 
 3 //*****************************************************
 4 #include "resource.h"
 5 #include "xml/Markup.h"
 6 #import "msxml4.dll"
 7 
 8 #import "C:/Program Files/Common Files/MSSoap/Binaries/mssoap30.dll" exclude("IStream", "IErrorInfo", "ISequentialStream", "_LARGE_INTEGER","_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
 9 using namespace MSSOAPLib30;
10 using namespace std;
11 
12 #include "XmlRW.h"
13 using namespace MSXML2;
14 
15 _bstr_t g_strNameSpace = "urn:SmsNewOperator";
16 //****************************************************

 

webservice下发短信短信实例:

BOOL WebserviceSubmit(CString g_strQXTUser,CString g_strQXTPSW,CString strMobilePhoneNumber,CString strSMSSubject,CString &strErrorMsg)
{
    ISoapSerializerPtr   Serializer; 
    ISoapReaderPtr   Reader; 
    ISoapConnectorPtr   Connector;

    HRESULT hr;

    //Connect to the service. 
    hr = Connector.CreateInstance(__uuidof(HttpConnector30));//创建对象
    if(FAILED(hr))    
    {
        printf("创建COM对象失败\n");
        g_DebugMsg.Sprintf("创建COM对象失败\n");
        return FALSE;
    }

    Connector->Property["EndPointURL"] ="http://211.162.125.74/ema/services/SmsNewOperator?wsdl"; //EndPointURL指定web服务

    hr = Connector->Connect();  
    if (FAILED(hr))
    {
        printf("创建HttpConnector30实例失败!\n");
        g_DebugMsg.Sprintf("创建HttpConnector30实例失败!\n");
        return FALSE;
    }

    //开始消息//消息体,// //在与服务器连接后,我们需要指定Web服务完成的操作 ,为了指定该操作,我们需要再次使用SoapConnector的Property属性
    Connector->Property["SoapAction"]   = "urn:SmsNewOperator/sendSms"; //函数体参数
    Connector->BeginMessage(); 


    hr = Serializer.CreateInstance(__uuidof(SoapSerializer30));    
    if (FAILED(hr))
    {
        printf("创建soapSerializer失败!\n");
        g_DebugMsg.Sprintf("创建soapSerializer失败!\n");
        return FALSE;
    } 


    Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));  
    //Build  the   SOAP   Message.创建soap消息
    Serializer->StartEnvelope("","NONE","");    //第一个参数是命名空间。
    Serializer->StartBody("");  

    Serializer->StartElement("sendSms",g_strNameSpace,"NONE","");  //函数处理

    //第一个参数处理  
    Serializer->StartElement("account","","NONE","");
    Serializer->WriteString((_bstr_t)g_strQXTUser);  
    Serializer->EndElement();

    //第二个参数处理  
    Serializer->StartElement("password","","NONE","");
    Serializer->WriteString((_bstr_t)g_strQXTPSW);
    Serializer->EndElement();


    //第三个参数处理  
    Serializer->StartElement("message",g_strNameSpace,"NONE","");

    Serializer->StartElement("phoneNumber","","NONE","");
    Serializer->WriteString((_bstr_t)strMobilePhoneNumber);
    Serializer->EndElement();

    Serializer->StartElement("content","","NONE","");
    Serializer->WriteString((_bstr_t)strSMSSubject);
    Serializer->EndElement();

/*
    Serializer->StartElement("scheduleTime","","NONE","");
    Serializer->WriteString((_bstr_t)strscheduleTime);
    Serializer->EndElement();
*/
    //第三个参数处理完成
    Serializer->EndElement();

    //第四个参数作为返回信息 
    Serializer->StartElement("sendResMsg","","NONE","");
    Serializer->WriteString("");
    Serializer->EndElement();

    //第五个参数作为返回信息 
    Serializer->StartElement("errMsg","","NONE","");
    Serializer->WriteString("");
    Serializer->EndElement();



    //设置接口函数sendsms结束
    Serializer->EndElement();

    Serializer->EndBody();  
    Serializer->EndEnvelope();  

    Connector->EndMessage();        

    Reader.CreateInstance(__uuidof(SoapReader30));  

    Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),"");  //加载返回数据

    //   Display  the   result.
    strErrorMsg = (const char*)Reader->Body->xml;

    g_DebugMsg.Sprintf("Answer:%s\n\n", (const char*)Reader->Body->xml);

    return TRUE;
}

 

posted @ 2013-08-29 16:40  CPYER  阅读(432)  评论(1)    收藏  举报