在 .net 中从 WSDL 创建 soap 端点

问题描述 投票:0回答:2

我正在尝试创建一个将由另一家公司使用的 SOAP Web 服务。该公司希望以某种方式提供数据,因此我创建了一个 WSDL 来反映这一点。 我不需要从 WSDL 自动生成服务,但如果可以的话那就太好了。 我只是想创建一个将使用数据的服务,就像 WSDL 所建议的那样。我正在使用 .net 核心 6.

我尝试过使用 serviceStack 我构建了 envelope/header/body 类,以便它按预期执行。但这似乎有点不稳定,因为我无法查询 WSDL。

如果我的服务指向 https://myurl/web_services/doStuff,

我应该能够查询 https://myurl/web_services/doStuff?WSDL 来获取 WSDL

如果 ServiceStack 不好,我愿意重新启动项目,但托管 WSDL 似乎应该是自动的。

这是我的服务代码:

public class MyServices : Service
{
    public object Any(Envelope request)
    {
        return new EnvelopeResponse(request);
    }

    // should I have to have this method to get the WSDL?
    public object Get(WSDL request)
    {
        return new WSDLResponse();
    }
}

这是我的信封类:

[Route("/web_services/doStuff", "POST")]
[DataContract]
public class Envelope : IReturn<EnvelopeResponse>
{
    [DataMember(Name = "Header", Order = 0)]
    public Header Header { get; set; }

    [DataMember(Order = 1)]
    public Body Body { get; set; }
}

当我尝试手动返回 WSDL 时,它会将 WSDL 类序列化为 XML,因此我需要手动构建一个 WSDL 类,这感觉不对。

[Route("/web_services/doStuff", "GET")]
[DataContract]
public class WSDL : IReturn<WSDLResponse> {}

[DataContract]
public class WSDLResponse 
{
  
    public WSDLResponse()
    {
        // return wsdl file contents here?
        Result = "wsdL";
    }
    
    [DataMember]
    public string Result { get; set; }
}

程序.cs

var builder = WebApplication.CreateBuilder(args);


var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
    app.UseHttpsRedirection();
}
app.UseServiceStack(new AppHost());

app.Run();

我查看了所有相关的 ServiceStack 文档,但找不到任何关于 WSDL 的有用信息

我要么尝试从这个 WSDL 创建一个新服务,要么从同一个 URL 托管一个 WSDL

c# .net api soap servicestack
2个回答
1
投票

这几乎肯定不是你应该做的,但我设法让 WSDL 在 get 方法上显示。

我更新了我的服务以导入我手工制作的 WSDL,然后我添加了一个标头以将 WSDL 作为 XML 返回


public class MyServices : Service
{
    public object Any(Envelope request)
    {
        return new EnvelopeResponse(request);
    }

    [AddHeader(ContentType = MimeTypes.Xml)]
    public object Get(WSDL request)
    {
        return System.IO.File.ReadAllText("myServiceName.wsdl");
    }
}

0
投票

ServiceStack 的 SOAP 支持记录在SOAP 支持.

您可以从 /元数据页面 解析所有服务的 WSDL 和 XSD,例如:

其中包含指向 SOAP 1.1 / 1.2 WSDL 端点的链接:

WSDLS

  • /soap12
  • /soap11
© www.soinside.com 2019 - 2024. All rights reserved.