项目需求,需要移植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;
}
网友评论