我在哪里

我正在尝试将某些WCF服务转换为使用ServiceStack。在大多数情况下,它实现了我想要的,但是肯定存在差异。例如,在WCF中,我有类似以下内容:

interface IMethod1{ ResultDTO Method1(InputDTO input); }
interface IMethod2{ ResultDTO Method2(InputDTO input); }
interface IMethod3{ ResultDTO Method3(InputDTO input); }

interface IMyService : IMethod1, IMethod2, IMethod3


然后执行:

public class MyService : ServiceBase, IMyService { /*  ... */ }




我在哪里

使用ServiceStack,它更像是:

public class Method1{
    // parameters for method as properties
}
public class Method2{
    // parameters for method as properties
}
public class Method3{
    // parameters for method as properties
}


我尝试了各种各样的事情,而我遇到的最新死胡同是:

public class MyServiceHost<T> : AppHostBase
{
    public MyServiceHost(string version)
        : base("My Service v" + version, typeof(T).Assembly)
    { }

    public override void Configure(Funq.Container container){
        Routes.AddFromAssembly(typeof(T).Assembly);
    }
}

protected void Application_Start(object sender, EventArgs e) {
    new MyServiceHost<Foo.Bar.V0101.MyService>("1.1").Init();
    new MyServiceHost<Foo.Bar.V0102.MyService>("1.2").Init();
    new MyServiceHost<Foo.Bar.V0201.MyService>("2.1").Init();
}


它抱怨AppHost已经被初始化。



我想去哪里

我想公开这样的东西:

http://www.sandwich.com/example/v0101/sandwichservice.wsdl
http://www.sandwich.com/example/v0102/sandwichservice.wsdl
http://www.sandwich.com/example/v0201/sandwichservice.wsdl


要么

http://www.sandwich.com/example/sandwich_v0101.wsdl
http://www.sandwich.com/example/sandwich_v0102.wsdl
http://www.sandwich.com/example/sandwich_v0201.wsdl


理想情况下,托管在同一服务流程中。

那么,我是否缺少一个简单的答案,或者从根本上来说,我把整件事弄错了吗?或简而言之:使用ServiceStack,是否可以以及如何在同一主机服务中公开版本化Web服务的多个端点和WSDL?

最佳答案

参见recommended versioning strategies with ServiceStack的答案。

您不能在ServiceStack中公开SOAP / WSDL的多个版本,建议您发展相同的DTO,这意味着没有以前的类型版本可以创建WSDL的较早版本。您需要为自动生成的WSDL托管较旧版本的ServiceStack项目,以便与较旧类型匹配。

您还可以为WSDL拍摄快照并静态地托管它,但是新SOAP端点是否接受发送旧SOAP版本的客户端取决于.NET的WCF Message类进行解析。但是由于SOAP是一种易碎的格式,因此称为YMMV。

关于c# - ServiceStack-如何在一项服务中托管多个版本化的终结点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13717028/

10-13 07:26