GSOAP-WebService跨语言调用

C++ WebService调用方客户端代码:

#include "soapBasicHttpBinding_USCOREServiceContractProxy.h"
#include "soapH.h"
#include <tchar.h>
const char server[] = "http://localhost:5293/Controllers/WebService.asmx";

/**
 *  处理字符串,避免乱码问题
 */

char* ToMultiString(wchar_t* str) 
{
    int wide_len = static_cast<int>(wcslen(str) + 1);
    int multi_len = WideCharToMultiByte(CP_ACP,0, str, wide_len, nullptr, 0, nullptr, nullptr);
    // 分配多字节字符串的空间
    char* multi_string = new char[multi_len];

    // 转换宽字符串到多字节字符串
    WideCharToMultiByte(CP_ACP, 0, str, wide_len, multi_string, multi_len, nullptr, nullptr);

    return multi_string;
}


/**
 *  跨语言调用WebService,程序入口
 */

int main()
{
    //创建 soap环境
    BasicHttpBinding_USCOREServiceContractProxy soap(server);

    _tempuri__Get req;//请求参数
    req.sno = const_cast < wchar_t*>(L"123");

    _tempuri__GetResponse resp;//服务端相应参数

    int result = soap.Get(&req, resp);  //调用WebService服务提供者的Get方法

    if (result == SOAP_OK)
    {
        char* name = ToMultiString(resp.GetResult->Name); //使用ToMultiString处理字符串避免乱码问题
        char* sno = ToMultiString(resp.GetResult->Sno);
        char* grade = ToMultiString(resp.GetResult->Grade);

        std::cout << sno << name << grade << std::endl; //打印结果

        delete name;
        delete sno;
        delete grade;
    }
    else 
    {
    
    }
}

C# Asp.Net Core WebService服务提供者代码:

using Microsoft.Extensions.DependencyInjection.Extensions;
using SoapCore;
using System.ServiceModel;
using System.Text;
using WebServiceTest.Controllers;
using WebServiceTest.Service;

namespace WebServiceTest
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.
            builder.Services.TryAddSingleton<ServiceContract, WebService>();
            builder.Services.AddSoapCore();

            var app = builder.Build();

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                SoapEncoderOptions options = new SoapEncoderOptions();
                options.WriteEncoding = Encoding.UTF8;
                endpoints.UseSoapEndpoint<ServiceContract>("/Controllers/WebService.asmx", options, SoapSerializer.DataContractSerializer);
            });

            app.Run();
        }
    }
}

 

using Microsoft.AspNetCore.Mvc;
using WebServiceTest.Models;
using WebServiceTest.Service;

namespace WebServiceTest.Controllers
{
    public class WebService : ServiceContract
    {
        public StudentModel Get(string sno)
        {
            return new StudentModel() { Sno = sno, Name = "小红", Grade = "202002", Birthday = new DateTime(2012, 8, 15) };
        }
    }
}

 

using System.Runtime.Serialization;

namespace WebServiceTest.Models
{
    [DataContract]
    public class StudentModel
    {
        /// <summary>
        /// 学号
        /// </summary>
        [DataMember]
        public string Sno { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        [DataMember]
        public string Name { get; set; }

        /// <summary>
        /// 班级
        /// </summary>
        [DataMember]
        public string Grade { get; set; }
        /// <summary>
        /// 生日
        /// </summary>
        [DataMember]
        public DateTime Birthday { get; set; }
    }
}
using System.ServiceModel;
using WebServiceTest.Models;

namespace WebServiceTest.Service
{
    [ServiceContract]
    public interface ServiceContract
    {
        [OperationContract]
        StudentModel Get(string sno);
    }
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值