java(客户端)调用 gSOAP发布的C++函数(服务器端)

java(客户端)调用 gSOAP发布的C++函数(服务器端)

  1. 服务器端

    1. 创建将要发布的c++头文件(calc.h)

      • //gsoap ns service name: calc  
        //gsoap ns service style: rpc
        //gsoap ns service encoding:encoded
        //gsoap ns service namespace: http://localhost/calc.wsdl
        //gsoap ns service location: http://localhost/calc.cgi
        //gsoap ns schema namespace: urn:calc
        int ns__add(double num1,double num2,double* sum );

      • 注意:

        • service name:提供的服务名称

        • service style:Web Service绑定类型,对应于wsdl中的

          <binding name="calc" type="tns:calcPortType">
          <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
          <operation name="add">
            <SOAP:operation style="rpc" soapAction=""/>
            <input>
               <SOAP:body parts="parameters" use="literal" namespace="urn:calc"/>
            </input>
            <output>
               <SOAP:body parts="parameters" use="literal" namespace="urn:calc"/>
            </output>
          </operation>
          </binding>

        • service encoding:编码格式,对应于wsdl中的<?xml version="1.0" encoding="UTF-8"?>

        • service namespace:命名空间,对应于wsdl中的targetNamespace和xmlns:tns的值

          targetNamespace="http://localhost/add.wsdl"
          xmlns:tns="http://localhost/add.wsdl"

        • service location:服务定位

          <service name="calc">
          <documentation>gSOAP 2.7.6c generated service definition</documentation>
          <port name="calc" binding="tns:calc">
            <SOAP:address location="http://localhost/calc.cgi"/>
          </port>
          </service>

           

        • schema namespace:

    2. 通过头文件生成相应的文件

      • 将gsoap_win32_2.7.6c.zip中的soapcpp2.exe拷贝至头文件(calc.h)所在的文件夹目录下,并在命令行中执行:soappcpp2.exe calc.h

        • 将生成下面的文件:

        •  

    3. 通过vc++ 6.0编译代码

      1. 创建项目(wt_pro_proj)

      2. 将刚才生成的文件以及gsoap_win32_2.7.6c.zip中的stdsoap2.h和stdsoap2.cpp拷贝至此项目的根目录下:

      3. 将图示中的文件添加至项目中:

      4. 添加wsock32.lib至项目中:

      5. soapC.cpp、soapServer.cpp、stdsoap2.cpp不使用预编译

      6. 创建头文件(calc.h)的实现源文件calcServer.cpp

        • #include "calc.h"
          #include "calc.nsmap"

          int main(int argc, char* argv[])
          {
              int m, s; /* master and slave sockets */
              struct soap calc_soap;
              soap_init(&calc_soap);//soap_set_namespaces(&calc_soap, add_namespaces);
              if (argc < 2)
              {
                  printf("usage: %s <server_port> \n", argv[0]);
                  exit(1);
              }
              else
              {
                  m = soap_bind(&calc_soap, NULL, atoi(argv[1]), 100);
                  if (m < 0)
                  {
                      soap_print_fault(&calc_soap, stderr);
                      exit(-1);
                  }
                  fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
                  for ( ; ; )
                  {
                      s = soap_accept(&calc_soap);
                      if (s < 0)
                      {
                          soap_print_fault(&calc_soap, stderr);
                          exit(-1);
                      }
                      fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);
                      soap_serve(&calc_soap);//该句说明该server的服务
                      soap_end(&calc_soap);
                  }
              }
              return 0;
          }
          //server端的实现函数与add.h中声明的函数相同,但是多了一个当前的soap连接的参数
          int ns__add(struct soap *calc_soap, double num1, double num2, double *sum)
          {
              *sum = num1 + num2;
              return 0;
          }

           

      7. 编译成功后,将在此项目的Debug目录下生成一个以项目名称命名的可执行文件(wt_pro_proj.exe)

      8. 通过在命令行中执行wt_pro_proj.exe  9000,发布c++的服务。注意9000为端口号,您可以指定任意没有被使用的端口号。

        •  

      9. 测试,在浏览器中输入http://localhost:9000
  2. 客户端

    •  

  3. 1

  4. 1

  5.  

评论

若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


还没有 Windows Live ID 吗?请注册

引用通告

你可能感兴趣的:(java)