zoukankan      html  css  js  c++  java
  • vc++ 访问php webService

    之前做了一个VC++访问c#制作的WebService,没有问题,接着我又做了一个VC++访问php制作的WebService ,
    结果老是出现Client错误。这个php WebService是用ZendStudio制作的,后来采用NUSoap做php的WebService就没问题。
    以下为整个过程:
    NUSoap WebService自作.
    参考网址:http://blog.csdn.net/raining_peidx/archive/2009/07/27/4384600.aspx
    1.php WebService 文件: nusoap_server3.php,以下为代码:


    复制代码
    <?php
    require_once("lib/nusoap.php");
    function AddNumbers($NumberOne,$NumberTwo)
    {
        return $NumberOne+$NumberTwo;
    }
    $soap = new soap_server;
     // 初始化对 WSDL 的支持
    $soap->configureWSDL('AddNumbers');
    // 注册服务
    $soap->register('AddNumbers',
    array("NumberOne"=>"xsd:int","NumberTwo"=>"xsd:int"),
    array("retrun"=>"xsd:int")           
    );
    $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
    $soap->service($HTTP_RAW_POST_DATA);
    ?> 
    复制代码

    2.VC客户端制作,以下是控制台应用程序制作。

    复制代码
    #include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>

    //先导入msxml4.dll,再导入mssoap30.dll
    #import "msxml4.dll" 
    #import "C:Program FilesCommon FilesMSSoapBinariesmssoap30.dll" 
        exclude("IStream", "IErrorInfo", "ISequentialStream", "_LARGE_INTEGER", 
        "_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
    using namespace MSXML2;
    using namespace MSSOAPLib30; 

    void Add(int No1,int No2)

    {
        //char *_itoa( int value, char *string, int radix );

        char str1[10],str2[10];

        itoa(No1,str1,10); itoa(No2,str2,10);

        ISoapSerializerPtr Serializer;

        ISoapReaderPtr Reader;

        ISoapConnectorPtr Connector;    

        // Connect to the service.

        Connector.CreateInstance(__uuidof(HttpConnector30));   


        Connector->Property["EndPointURL"] = "http://localhost/test/nusoap/nusoap_server3.php";  
        Connector->Connect();



        
        //Connector->Property["SoapAction"] = "http://Fantasy/WebServiceDemo/AddNumbers";
        Connector->Property["SoapAction"] = "http://localhost/test/nusoap/nusoap_server3.php/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("","","");

        //这里可以添加SoapHeader验证代码:

        /*

        Serializer->StartHeader("");

        Serializer->StartHeaderElement("MyHeader","http://Fantasy/WebServiceDemo/",0,"","NONE","");   

        Serializer->StartElement("UserName","","","");//填充参数2则出错。

        Serializer->WriteString(_bstr_t(userName));

        */

        Serializer->StartBody("");   

        //Serializer->StartElement("AddNumbers"," http://localhost/test/soap/Server.php/","","");
        //Serializer->StartElement("AddNumbers","http://Fantasy/WebServiceDemo/","","");
        Serializer->StartElement("AddNumbers","","","");

        //(第三个参数可有可无,若加上第二个参数出错!?)

        Serializer->StartElement("NumberOne","","","");// NumberOne=

        Serializer->WriteString((_bstr_t)str1);

        Serializer->EndElement();      

        Serializer->StartElement("NumberTwo","","","");// NumberOne= 

        Serializer->WriteString((_bstr_t)str2);

        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 ", (const char*)Reader->RpcResult->text);  

    }

    int main()

    {   

        CoInitialize(NULL);   

        Add(1211,21114);  

        CoUninitialize();

        return 0;

    }
    复制代码


    注意:此方法只对NUSOAP制作的WebService有效,对zendStudio制作的WebService无效。

  • 相关阅读:
    powerdesigner 使用心得 comment、name
    idea 从git上checkout项目下来,project没有文件目录结构
    关于freemarker 空变量的接收以及类型转换 笔记
    关于indexof和substring经常记不住的点
    Intellij IDEA快捷键
    oracle 修改服务端字符集编码
    个人作业——软件工程实践总结&个人技术博客
    如何设置标签云
    前端框架的部署
    个人作业——软件评测
  • 原文地址:https://www.cnblogs.com/xumaojun/p/8543198.html
Copyright © 2011-2022 走看看