1

私はWCF WebHttp ServicesRESTfulAPIを作成するためにMicrosoftを使用することを調査しています。過去には.NET3.5がありましたが、WCF REST Starter Kit現在は.NET4に置き換えられているようですWCF REST Service Template 40

もちろん、Spring.NETのDIを使用したいのですが、に正常に統合する方法を説明しているリソースがWeb上に見つからないようSpring.NETですWCF WebHttp Services

Springを従来のWCFサービスに組み込むための非常に「興味深い」方法を知っていますが、Spring.NETをと統合する方法を知っている人はいWCF WebHttp Servicesますか?

興味のある詳細:

  • WCF WebHttp Services私はMVCglobal.asaxと同じように、ルートなどを登録できます。
  • これは、古き良き時代のようにGlobal受け継がれています。HttpApplicationSpringMvcApplication
  • ただし、ルートは少し異なります。

    RouteTable.Routes.Add(new ServiceRoute("MyService", new WebServiceHostFactory(), typeof(MyService)));
    

Springをそれに接続するための2つの可能な方法を想定します。

  1. Global代わりにSpringクラスから継承しましょうHttpApplication
  2. ServiceHostFactoryルートを登録するときは、によって提供されるカスタムを使用してくださいSpring.NET

誰かがこれを達成するためのリソースまたはいくつかの追加のドキュメントを知っていますか?誰かがすでにこれをしましたか?

4

3 に答える 3

3

私は自分で同じことをしなければなりませんでした。WebAPIhttpホストファクトリを拡張する必要がありました。

詳細はこちらをご覧ください:Spring.NET WCF Web API

しかし、要するにこれを行います:

public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes();
    }

    private void RegisterRoutes()
    {
        RouteTable.Routes.Add(new ServiceRoute("Catalog", new SpringHttpServiceHostFactory(), typeof(UnitysCatalogService)));
    }
}

public class SpringHttpServiceHostFactory : HttpServiceHostFactory
{
    private IApplicationContext _applicationContext;

    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        Configuration.CreateInstance = GetInstance;
        Configuration.ReleaseInstance = ReleaseInstance;

        return base.CreateServiceHost(serviceType, baseAddresses);
    }

    private object GetInstance(Type serviceType, InstanceContext instanceContext, HttpRequestMessage request)
    {
        return GetApplicationContext().GetObject(serviceType.Name);
    }

    private void ReleaseInstance(InstanceContext instanceContext, object instance)
    {

    }

    private IApplicationContext GetApplicationContext()
    {
        return _applicationContext ?? (_applicationContext = ContextRegistry.GetContext());
    }
}

そしてあなたのweb.configで:

<configuration>
  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web" />
    </sectionGroup>
  </configSections>

  <spring>
    <context>
      <resource uri="file://~/Config/spring-config.xml" />
    </context>
  </spring>
  <!-- .... -->
</configuration>
于 2012-01-21T13:29:52.490 に答える
2

そのようなことを試して、私に知らせてください:

RouteTable.Routes.Add(new ServiceRoute("MyService", new WebServiceHostFactory(), 
new ServiceProxyTypeBuilder("MyServiceNameInSpringConfigFile", ContextRegistry.GetContext(), true).BuildProxyType()));

(クラスSpring.Servicesを使用するには、への参照が必要です)Spring.ServiceModel.Support.ServiceProxyTypeBuilder

于 2011-11-21T10:20:18.553 に答える
0

廃止されたようですのでWCF WebHttp Services、これ以上の調査はしませんでした。

後継者は、メインプロジェクトとしてプレーンな古いMVC3アプリケーションを使用してSpring.NET統合を自動的に許可するWCFWebAPIになります WCF Web API現在プレビュー状態であり、2012年2月頃にリリース候補を取得する予定です。

このまったく新しい非常に強力なRESTフレームワークの使用をお勧めします。ただし、実験的なソフトウェアと統合する場合はリスクに注意してください。それはまだベータ版であり、いつ最終的にリリースされるのか、そして現在の機能のどれがまだリリースの一部であるのか、誰も確実に予測することはできません。ベータフレームワークで作業すると、プロジェクトのタイムスケジュールに影響を与える可能性があります。

于 2012-01-18T12:02:24.870 に答える