You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中创建带安全令牌的客户端Web服务调用SOAP服务及项目选型

问题解答

1. 在C#中创建带安全令牌的SOAP客户端服务

方法一:使用内置WS-Security令牌(如用户名密码)

如果目标SOAP服务遵循WS-Security标准,可直接通过自动生成的客户端代理配置令牌:

  1. 添加SOAP服务引用:右键项目 → 「添加」→「服务引用」,输入SOAP服务的WSDL地址,生成客户端代理类。
  2. 配置令牌并调用服务:
// 实例化自动生成的SOAP客户端
var soapClient = new YourGeneratedSoapServiceClient();

// 设置WS-Security用户名密码令牌
soapClient.ClientCredentials.UserName.UserName = "your-username";
soapClient.ClientCredentials.UserName.Password = "your-password";

// 调用目标SOAP服务方法
var response = soapClient.TargetServiceMethod(yourRequestData);

方法二:自定义安全令牌(如JWT、自定义字符串令牌)

如果需要插入自定义格式的令牌到SOAP请求头,可通过IClientMessageInspector实现:

  1. 实现消息检查器:
public class TokenInjectorInspector : IClientMessageInspector
{
    private readonly string _securityToken;
    private readonly string _headerName;
    private readonly string _headerNamespace;

    public TokenInjectorInspector(string token, string headerName, string headerNamespace)
    {
        _securityToken = token;
        _headerName = headerName;
        _headerNamespace = headerNamespace;
    }

    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        // 创建并添加自定义SOAP头
        var tokenHeader = MessageHeader.CreateHeader(
            _headerName,
            _headerNamespace,
            _securityToken);
        request.Headers.Add(tokenHeader);
        return null;
    }

    public void AfterReceiveReply(ref Message reply, object correlationState)
    {
        // 无需处理回复则留空
    }
}
  1. 绑定检查器到客户端:
// 实现端点行为类
public class TokenEndpointBehavior : IEndpointBehavior
{
    private readonly IClientMessageInspector _inspector;

    public TokenEndpointBehavior(IClientMessageInspector inspector)
    {
        _inspector = inspector;
    }

    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) { }

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
        clientRuntime.ClientMessageInspectors.Add(_inspector);
    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { }

    public void Validate(ServiceEndpoint endpoint) { }
}
  1. 调用SOAP服务:
var soapClient = new YourGeneratedSoapServiceClient();
var tokenInspector = new TokenInjectorInspector(
    "your-custom-security-token",
    "SecurityToken", // 需匹配服务端预期的头名称
    "http://your-service-namespace.com"); // 需匹配服务端命名空间

soapClient.Endpoint.Behaviors.Add(new TokenEndpointBehavior(tokenInspector));

// 发起请求
var response = soapClient.TargetServiceMethod(yourRequestData);

2. Visual Studio中适合的项目类型

根据你的技术栈和需求,可选择以下项目类型:

  • ASP.NET Core Web API(推荐):当前.NET生态的主流方案,支持跨平台,内置完善的身份验证框架(如JWT验证),可快速搭建本地API接收客户端请求,验证令牌后转发至SOAP服务。创建时选择「ASP.NET Core Web API」模板(.NET 6及以上版本)。
  • WCF Service Application:适用于传统.NET Framework技术栈,原生支持SOAP协议和多种安全令牌标准(WS-Security、Kerberos等),适合对接传统企业级SOAP服务。
  • Console App:如果需求简单(仅需作为客户端直接调用SOAP服务,无需对外暴露API),控制台应用足够,适合测试或轻量场景。
  • ASP.NET Web API(.NET Framework):针对仍在使用.NET Framework的项目,可创建基于框架的Web API,集成ASP.NET身份验证体系,处理客户端请求并转发SOAP调用。

内容的提问来源于stack exchange,提问作者Mohammad Ramezani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:54:51