webapi创建WCF WebService+WCF WebService远程服务调用

首先需要引入soapcore包

image

这个包提供了所需的类和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文件测试

image

  • 服务方法测试

image

添加WebService服务引用

为了方便测试,我把项目发布了一下,然后把发布了的项目exe运行了起来。在解决方案中再添加正在运行的项目里面那个WebService。
有两种方法添加服务引用

  • 第一种是在项目上右键选择添加->服务引用,选择WCF那一项
    image
  • 第二种方式是双击项目下面的Connected Service,然后选择连接的服务,在服务引用那一栏点+号。仍然会弹出同样的界面
    选择下一步后,出现弹窗
    image
  • 填上服务的地址后点击转到。
  • 点击浏览,选择别人给的WSDL文件
    这两种方式都可以
    然后可以改一下自己认为合适的命名空间,我改为了ProvinceServiceReference
    然后一路下一步就行

使用WebService

使用方式和普通的实例方法调用一样,我把它写到控制器Action中

[HttpGet]
[AllowAnonymous]
public async Task<object> GetProvinceService(string provinceName)
{
    ProvinceInfoServiceClient client = new ProvinceInfoServiceClient();
    return await client.GetProvinceInfoAsync(provinceName);
}
  • 测试

image

posted @   ggtc  阅读(91)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
//右下角目录
点击右上角即可分享
微信分享提示