2

私がいた場所

代わりにServiceStackを使用するようにいくつかのWCFサービスを変換しようとしています。ほとんどの場合、それは私が望むことを達成していますが、間違いなく違いがあります。たとえば、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を公開することは可能ですか?

4

1 に答える 1

2

ServiceStackで推奨されるバージョン管理戦略については、この回答を参照してください。

ServiceStackで複数のバージョンのSOAP/WSDLを公開することはできません。同じDTOを進化させることをお勧めします。つまり、古いバージョンのWSDLを作成するための以前のタイプのバージョンはありません。自動生成されたWSDLを古いタイプと一致させるには、古いバージョンのServiceStackプロジェクトをホストする必要があります。

WSDLのスナップショットを取得して静的にホストすることもできますが、新しいSOAPエンドポイントが古いSOAPバージョンを送信するクライアントを受け入れるかどうかは、解析を行う.NETのWCFメッセージクラス次第です。しかし、SOAPは脆弱な形式であるため、YMMVです。

于 2012-12-05T06:16:42.813 に答える