首先需要引入soapcore包
这个包提供了所需的类和soap终结点中间件。
引入这个这个包之后,我们需要定义提供的服务。
这里我写了一个用于查询省份面积的服务。
省份信息服务
/// <summary>
/// 省份信息服务接口
/// </summary>
[ServiceContract]
public interface IProvinceInfoService
{/// <summary>/// 获取省份面积/// </summary>/// <param name="provinceName"></param>/// <returns></returns>[OperationContract]ProvinceResult GetProvinceInfo(string provinceName);
}/// <summary>
/// 省份信息服务实现
/// </summary>
public class ProvinceInfoService : IProvinceInfoService
{public ProvinceResult GetProvinceInfo(string provinceName){if (string.IsNullOrEmpty(provinceName)){return new ProvinceResult();}else{switch (provinceName){case "四川":return new ProvinceResult() { Name= provinceName,Area=48.14m };case "新疆":return new ProvinceResult() { Name = provinceName, Area = 166 };default:return new ProvinceResult() { Name = provinceName};}}}
}/// <summary>
/// 实体类
/// </summary>
[DataContract]
public class ProvinceResult
{[DataMember]public string Name { get; set; }[DataMember]public decimal Area { get; set; }
}
定义服务之后在web主机中注册服务
//添加webService服务
builder.Services.AddSingleton<IProvinceInfoService, ProvinceInfoService>();
//添加webservice服务终结点,当请求的资源在控制器中路由不到时会路由到这里
app.UseSoapEndpoint<IProvinceInfoService>("/ProvinceInfoService", new SoapEncoderOptions());
现在WebService就创建好了,实在是很简单。只是soapcore没有提供测试页面,而netFramework用.asmx写的服务不加后面的路径时,返回的是一个HTML测试页面,很方便。soapcore就没有搞这个了,默认是返回WSDL文件。
测试服务
-
WSDL文件测试
-
服务方法测试
添加WebService服务引用
为了方便测试,我把项目发布了一下,然后把发布了的项目exe运行了起来。在解决方案中再添加正在运行的项目里面那个WebService。
有两种方法添加服务引用
- 第一种是在项目上右键选择添加->服务引用,选择WCF那一项
- 第二种方式是双击项目下面的Connected Service,然后选择连接的服务,在服务引用那一栏点+号。仍然会弹出同样的界面
选择下一步后,出现弹窗
- 填上服务的地址后点击转到。
- 点击浏览,选择别人给的WSDL文件
这两种方式都可以
然后可以改一下自己认为合适的命名空间,我改为了ProvinceServiceReference
然后一路下一步就行
使用WebService
使用方式和普通的实例方法调用一样,我把它写到控制器Action中
[HttpGet]
[AllowAnonymous]
public async Task<object> GetProvinceService(string provinceName)
{ProvinceInfoServiceClient client = new ProvinceInfoServiceClient();return await client.GetProvinceInfoAsync(provinceName);
}
-
测试