服务堆栈(其余)不正确的WSDL,带有单声道



我用服务堆栈 3.9.70 编写了一个简单的自托管(在控制台应用程序中)休息服务。

using System;
using System.Runtime.Serialization;
// service stack support
using ServiceStack.ServiceHost;
using ServiceStack.WebHost.Endpoints;
namespace HelloWorldConsole
{
    namespace DTO
    {
        [DataContract(Namespace = "http://localhost:8080/types")]
        [Route("/hello/{Name}")]
        class Hello : IReturn<HelloResponse>
        {
            [DataMember]
            public string Name { get; set; }
        }
        [DataContract(Namespace = "http://localhost:8080/types")]
        class HelloResponse
        {
            [DataMember]
            public string Response { get; set; }
        }
    }
    class HelloService : IService
    {
        public Object Any(DTO.Hello request)
        {
            return new DTO.HelloResponse { Response = "Hello " + request.Name };
        }
    }
    public class HelloHost : AppHostHttpListenerBase
    {
        public HelloHost()
            : base("Hello Service Self-Host",
                typeof(HelloService).Assembly)
        { }
        public override void Configure(Funq.Container container)
        {
            SetConfig(new EndpointHostConfig
            {
                DebugMode = true,
                WsdlServiceNamespace = "http://localhost:8080/",
                WsdlSoapActionNamespace = "http://localhost:8080/",
                SoapServiceName = "HelloService"
            });
        }
    }
    class MainClass
    {
        public static void Main (string[] args)
        {
            string listenOn = "http://localhost:8080/";
            HelloHost host = new HelloHost ();
            host.Init ();
            host.Start (listenOn);
            Console.WriteLine ("AppHost created at {0} on {1}",
                DateTime.Now, listenOn);
            Console.ReadKey ();
        }
    }
}

在Windows下,生成的WSDL很好,如果我尝试创建一个客户端应用程序并在localhost上添加对soap服务的Web引用,我可以调用Hello。如果我使用 Mono 在 Linux 下运行相同的代码,则生成的 WSDL 不包含 DTO 命名空间中定义的类型。如果我尝试在客户端上添加 Web 服务引用,则无法利用 hello 方法。

在此链接中,我读到默认情况下,相同的ServiceStack Console应用程序二进制文件按原样在Windows/.NET和Mono/Linux上运行。我试图在窗口下启动二进制文件;服务运行,但生成的 WSDL 不正确(未在 DTO 命名空间中定义类型)。我使用单声道 2.10.8.1。

有人有什么建议吗?

我还有一个问题。如果我使用新版本服务堆栈最新版本 (4.0.33),我无法利用 SOAP 端点。

在此链接中,我读到SOAP端点在托管在HttpListener主机上时不可用。这是新版本 4.0 引入的功能吗?难道没有利用服务堆栈版本高于 3.9 的 SOAP 端点的可能性吗?

任何帮助,不胜感激。

Mono 具有弱和部分的 WCF/SOAP 支持,将无法为许多重要的服务定义生成 WSDL。这种情况在不久的将来可能会有所改善,因为Microsoft已经开源了.NET服务器库,但在此期间,如果你想使用SOAP,我建议避免使用Mono。

最新更新