在VSCode写.netCore 踩坑记四(SOAP客户端)

2021-03-24  本文已影响0人  有头发的搬砖员

项目需求,需要移植windows C#的代码到.net core中,以便在liunx上运行
其中使用到SOAP客户端获取资源。
但由于.net core是没有”添加服务引用“,vscode也没有vs这么强大
so,只能自己来了

-------------------------------------------我是一条分界线--------------------------------------------

首先需要安装dotnet-svcutil工具,进入终端输入:

dotnet tool install --global dotnet-svcutil

安装完毕后执行一下语句:

//这里的地址填写你的服务端地址及SOAP接口
dotnet-svcutil http://ip.com/address.svc

如果能正常连接SOAP服务端,会在项目内创建ServiceReference文件夹
目录结构如下:


创建完成后目录结构

在调用的地方添加命名空间

using ServiceReference;

调用函数

//根据接口名称修改
//注意函数需要加上 async 关键字
public async void sayHi(){
      //new出client接口 
    //第一个参数采用枚举值addressSoap12代表soap1.2版本
    //第二参数是接口地址 字符串
    addressSoapClient client = new addressSoapClient(addressSoapClient.EndpointConfiguration.addressSoap12,"http://ip.com/address.svc");
    //调用接口的SayHi方法
    SayHiResponse response = await client.SayHiAsync();
    //SayHiResult即是方法的结果
    String result= response.Body.SayHiResult;
    Console.WriteLine(result);
}

以上的调用是异步执行,也就是在调用 sayHi() 函数的时候,程序不会等待这个函数执行完毕就直接往下走,直到 response 返回线程才回来,而添加了async函数也不能有返回值

如想变成同步执行可以这样写

//根据接口名称修改
//注意函数没有 async 关键字,并且可以有返回值
public string sayHi(){
      //new出client接口 
    //第一个参数采用枚举值addressSoap12代表soap1.2版本
    //第二参数是接口地址 字符串
    addressSoapClient client = new addressSoapClient(addressSoapClient.EndpointConfiguration.addressSoap12,"http://ip.com/address.svc");
    //调用接口的SayHi方法,这里没有立即写入返回值,而且取消了 await 关键字,用Wait()方法替代
    client.SayHiAsync().Wait();
    //第二次调用加上GetAwaiter() 与 GetResult() 方法返回 response 
    SayHiResponse response = client.SayHiAsync().GetAwaiter().GetResult();
    //SayHiResult即是方法的结果
    String result= response.Body.SayHiResult;
    Console.WriteLine(result);
    //得到的结果返回函数调用处
    return result;
}
上一篇 下一篇

猜你喜欢

热点阅读