在DotNet中使用HttpClient调用WebService服务

在DotNet中使用HttpClient调用WebService服务

概述

最近在用Blazor Server重写一个Asp.Net的老网站,本来一切都是那么的愉快,直到需要调用WebService的接口服务,使用WCF也是一种解决方法,但是对服务的签名的序列化和反序列化却是存在一些问题,而且也不能在WASM模式下使用,于是乎便想着用HttpClient尝试解决一下吧。

构建Soap请求报文调用WebService接口服务,支持多端点配置,支持请求队列和并发配置

使用方式

dotnet add package SoapRequestHelper --version 0.0.2

配置服务

builder.Services.AddSoapServiceHelper(m =>
{
    m.AddSoapService("Service1"), config =>
    {
        config.Url = "Service1 WebServiceUrl";
        config.ConcurrencyLimit = maxConcurrent;
        config.QueueCapacity = maxQueueLimit;
        config.RequestNamespace = "RequestNamespace";
        config.ResponseNamespace = "ResponseNamespace";
    }).AddSoapService("Service2"), config =>
    {
        config.Url = "Service2 WebServiceUrl";
        config.ConcurrencyLimit = maxConcurrent;
        config.QueueCapacity = maxQueueLimit;
        config.RequestNamespace = "RequestNamespace";
        config.ResponseNamespace = "ResponseNamespace";
    }).SetDefault("Service1");
});

获取ISoapService

先获取ISoapServiceFactory

public class TestClass(ISoapServiceFactory soapFactory)
{

}

通过ISoapServiceFactory获取ISoapService

ISoapService service = soapFactory.GetSoapService("Service1");

使用ISoapService发送请求

SoapResponse response = await service.SendAsync("MethodName", new()
{
    ["Param1"] = value1,
    ["Param2"] = value2,
    ["Param3"] = value3
});

处理结果

属性/方法 说明 备注
Success 调用是否成功
Exception 异常对象
RawContent 响应的完整报文
RawValue 响应的Body内容
RequestContent 请求的原始报文
ReadReturnValue 返回接口签名中的返回值 具有泛型和非泛型版本,泛型可以尝试转化成对应的数据类型,非泛型返回dynamic
ReadReturnValueAsXml 返回接口签名中的返回值 返回值类型是XElement?
ReadReturnValueAsDataTable 如果返回值是DataTable,尝试转为DataTable
ReadParameterReturnValue out参数或者ref参数的返回值 具有泛型和非泛型版本,泛型可以尝试转化成对应的数据类型,非泛型返回dynamic
ReadParameterReturnValueAsXml out参数或者ref参数的返回值 返回值类型是XElement?
ReadParameterReturnValueAsDataTable out参数或者ref参数的返回值 如果返回值是DataTable,尝试转为DataTable
GetValue 根据XPath返回节点内容 需要加上r命名空间
GetNode 根据XPath返回节点 需要加上r命名空间
posted @ 2025-07-31 10:36  yaoqinglin_mtiter  阅读(24)  评论(0)    收藏  举报