• C#作为客户端调用gsoap生成的C++服务端


    近日在学习C++,偶然遇到网友想用C#调用gsoap生成的C++服务的问题,遂决定研究一下,网上搜索了很久,大多数是C++调用C#的应用....

    经过本人的不断努力,终于找到一种解决问题的方法,总结如下:

    1. 下载gsoap工具

    地址:http://sourceforge.net/projects/gsoap2/files/gSOAP/

    点击Download 下载最新版工具,解压文件

    2. C++编写Sever端

    用VS2010新建一个Win32控制台应用程序,命名Server,选择空项目,其他默认即可。

    添加一个add.cpp和add.h,在add.h中声明一个函数int ns__add(int num1, int num2, int *sum);

    将add.h复制到gsoap_2.8.16gsoap-2.8gsoapinwin32目录下,打开cmd,进入当前目录,敲入命令soapcpp2.exe add.h,回车:

    得到以下文件

    将soapH.h、soapStub.h、soapC.cpp、soapServer.cpp、ns.nsmap和gsoap_2.8.16gsoap-2.8gsoap目录中的stdsoap2.h、stdsoap2.cpp拷贝到项目中,打开add.cpp文件,添加内容如下:

    #include "add.h"
    #include "ns.nsmap"
    #include "cstring"
    using namespace std;
    int main(int argc, char* argv[])
    {
     int nPort = 8080;
     struct soap fun_soap;
     soap_init(&fun_soap);
     int nMaster = (int)soap_bind(&fun_soap, NULL, nPort, 100);
     if (nMaster < 0)
     {
      soap_print_fault(&fun_soap, stderr);
      exit(-1);
     }
     fprintf(stderr, "Socket connection successful : master socket = %d ", nMaster);
     while (true)
     {
      int nSlave = (int)soap_accept(&fun_soap);
      if (nSlave < 0)
      {
       soap_print_fault(&fun_soap, stderr);
       exit(-1);
      }
      fprintf(stderr, "Socket connection successful : slave socket = %d ", nSlave);
      soap_serve(&fun_soap);
      soap_end(&fun_soap);
     }
     cin.get();
     return 0;
    }
    //server端的实现函数与add.h中声明的函数相同,但是多了一个当前的soap连接的参数
    int ns__add(struct soap *add_soap, int num1, int num2, int *sum)
    {
     *sum = num1 + num2;
     return 0;
    }

    项目目录如下:

    编译,运行如下:

    说明服务已成功启动。验证以下,在浏览器中输入http://localhost:8080,回车,如果成功可看到

    3. C#编写Client端

    新建一个空白网站项目,右键单击项目,选择添加web引用

    将会看到如下界面,在URL输入用gsoap生成的ns.wsdl文件路径,然后点击“添加引用”按钮

    空白网站中将会得到如下目录

    打开vs2010命令行工具(vs2010旗舰版在菜单栏中:“工具”->“visual studio 命令提示”),进入Service.wsdl文件所在目录,输入如下命令wsdl  /o: Service.wsdl

    wsdl工具vs2010自带。

    成功后将会在目录中得到Service.cs 文件

    新建C#控制台应用程序,将Service.cs文件添加到项目中,添加 System.Web.Services 引用

    在Program.cs文件中编写如下代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Service s = new Service();
                s.Url = "http://localhost:8080";
                add d = new add();
                d.num1 = 200;
                d.num2 = 100;
                addResponse ar = s.add(d);
                Console.WriteLine(ar.sum);
                Console.ReadKey();
            }
        }
    }

    启动C++的Server项目,同时运行C#控制台项目,一切顺利将会显示如下:

     

    转自:https://blog.csdn.net/guhun_shmily/article/details/13997093

  • 相关阅读:
    Spring+JCaptcha验证码使用示例
    Hibernate-Session使用的背后
    DWR+Spring配置使用
    Spring+Quartz配置定时任务
    利用HtmlParser解析网页内容
    利用HttpClient4访问网页
    利用Common-Fileupload上传文件图片
    利用Common-BeanUtils封装请求参数
    浮点数的一点东西
    基数排序——浮点数结构体进阶
  • 原文地址:https://www.cnblogs.com/liushui-sky/p/9677976.html
Copyright © 2020-2023  润新知