zoukankan      html  css  js  c++  java
  • VC6开发Web Services 客户端

    本文引用:
    1.使用Visual C++开发SOAP客户端应用
    2.http://www.cnblogs.com/babyblue/archive/2004/04/02/5030.aspx
    3.关于 Unicode 和字符集的最基础的知识
    4.ASP.net中的Server.UrlEncode函数和ASP中的Server.URLEncode函数返回的值竟然不一样

    不同的WebService需要更改的地方:
    1.请求的URL:
    Connector->Property["EndPointURL"] = "
    http://localhost/Test/Test.asmx"; 
    2.请求的SoapAction(访问C#写的
    http://localhost/Test/Test.asmx时它会告诉你SoapAction是什么)
    Connector->Property["SoapAction"] = "
    http://tempuri.org/HelloWorld";
    3.所请求的方法名及其所需要的参数
       Serializer->StartElement("HelloWorld","
    http://tempuri.org","","");
       Serializer->EndElement();

    注意红色的地方一定要写得一模一样,否则该方法的参数传进去时会变成NULL
    总结一下必要的关键步骤(使用SOAP ToolKit3.0)
    1.导入类型库
    2.需要创建一个SoapConnector
    3.下一步创建SoapSerializer
    4.下一步把消息附加到SoapConnector的输入流
    5.下一步读取结果.要读取服务器的回复,客户端应用需要使用SoapReader,
    6.SoapReader被连接到SoapConnector输出流
    7.用IXMLDOMElement对象可以从SoapReader里读到服务器的回复


    英文原文
    http://www.codeguru.com/Cpp/COM-Tech/complus/soap/article.php/c3945/

    如何发送中文?

    发送中文的话还需要进行编码转换,在机器中通常是DBCS双字节字符集,要将它转成Unicode,然后再转成UTF-8才能发送。同理,接收时收到的是UTF-8,要将其还原成Unicode,再变成DBCS。

    关于中文字符的编码可以参考:关于 Unicode 和字符集的最基础的知识

    简单地说,
    DBCS:采用GBK/GB2312编码,有代码页(GB2312是936),英文字符一个字节,代码页中的字符两个字节。
    UTF-16(UCS2):用两个字节表示一个中文字或一个英文字,所有的东西都是两个字节的。
    UTF-32(UCS4):同上,只不过用4个固定的字节表示一个中文字或英文字。
    UTF-8:用1-6个字节表示一个Unicode编码,比较复杂:开始有几个1就表示该Unicode编码由几个字节组成,如:10……表示由1个字节组成;110……由两个字节组成。后续的每个字节都是10xx xxxx。
    UTF-7:另一种Unicode编码,我暂时未用过。

            char str[5] = "中文";

            int iLenWideChar = MultiByteToWideChar(0, 0, const_cast<char *>(str), sizeof(str), NULL, 0);

            strWideChar = new unsigned short[iLenWideChar];
            if(NULL == strWideChar)
            {
                goto Exit;
            }

            int iLenRet = MultiByteToWideChar(0, 0, const_cast<char *>(str), sizeof(str), strWideChar, iLenWideChar);


    返回时:
            char * iterator = strReturn;
            //convert UTF-8 to WideChar
            for(unsigned int i=0; iterator <= (strReturn+iLenReturn) && i<iLenReturn; ++i)
            {
                sp_UTF8_UCS(iterator,UTF8Return[i]);
            }

            //UTF-8 to UTF16
            int iLenANSIReturn = WideCharToMultiByte(0, 0, UTF8Return, -1, NULL, 0, NULL, NULL);

            strANSIReturn = new char[iLenANSIReturn];
            if(NULL == strANSIReturn)
            {
                goto Exit;
            }

            WideCharToMultiByte(0, 0, UTF8Return, -1, strANSIReturn, iLenANSIReturn, NULL, NULL);

            printf("ANSI:%s\n", strANSIReturn);
            getchar();

    最后不要忘了delete

    Exit:

        if(NULL != strWideChar)
        {
            delete [] strWideChar;
            strWideChar = NULL;
        }

        if(NULL != strANSIReturn)
        {
            delete [] strANSIReturn;
            strANSIReturn = NULL;
        }

  • 相关阅读:
    搬家
    围棋程序
    图论----基础知识
    贪心算法
    944. 删列造序
    1221. 分割平衡字符串
    面试题 01.01. 判定字符是否唯一
    剑指 Offer 10- II. 青蛙跳台阶问题
    面试题 16.11. 跳水板
    1137. 第 N 个泰波那契数
  • 原文地址:https://www.cnblogs.com/huqingyu/p/18131.html
Copyright © 2011-2022 走看看