オンライン バージョンだけでなく、スタンドアロン バージョンのアプリケーションも使用できるようにする必要があります。これを行う 1 つの可能な方法は、スタンドアロンを満たす WPF バージョンと、MVC Web バージョンを用意することです。
明らかに、それには 2 つのコード ベースが必要です (ただし、フロント エンド コードを除いて、それらは同一である必要があります)。Web API セルフホスティングは、必要に応じて本格的な Web アプリをホストできるほど安定していますか?
オンライン バージョンだけでなく、スタンドアロン バージョンのアプリケーションも使用できるようにする必要があります。これを行う 1 つの可能な方法は、スタンドアロンを満たす WPF バージョンと、MVC Web バージョンを用意することです。
明らかに、それには 2 つのコード ベースが必要です (ただし、フロント エンド コードを除いて、それらは同一である必要があります)。Web API セルフホスティングは、必要に応じて本格的な Web アプリをホストできるほど安定していますか?
私は Web API を使用して、運用中の多数のプロジェクトを自己ホストしています。Web サイトhttp://www.hypermediaapi.comは、自己ホスト Web API です。
Web API はセルフホストで実行できますが、ASP.NET (MVC) を実行するにはIIS (Express)などのサーバーが必要です。
できることは、マシンに IIS Express をインストールし、その中で Web アプリをホストし、必要に応じて Web API を自己ホストすることです。もちろん、IIS Express が既にインストールされている場合は、その中のすべて (Web アプリと Web API の両方) を実行することを選択することもできます。
同じデータベース/サービスを使用して内部/外部アプリの両方を使用しても問題がなければ、IIS で単一バージョンの WebAPI サーバーをホストし、それを API コントローラーに使用するだけです。
次に、WebAPI サービスを呼び出す 2 つの同一の ASP.Net MVC サイト (デスクトップと Web ではなく) を使用できます。1 つはイントラネットでホストされ、もう 1 つはインターネットでホストされます。どちらもビジネス機能とデータ永続化のために WebAPI にアクセスします。
ここでの目標は、維持するコードの量を減らすことです。基本的には、WebAPI プロジェクトと ASP.Net MVC サイトの 2 つのプロジェクトです。
このシナリオでは、2 つ以上のコード ベースを用意する必要はありません。必要なのは、アプリケーションに API を提供するライブラリです。このライブラリは、デスクトップ アプリと思われるスタンドアロン アプリケーションで直接使用できます。
次に、同じライブラリのラッパーにすぎない WCF または Web API、または両方のレイヤーを作成できます。WCF/Web API コントラクトは DTO と同じにすることができるため、WCF サービスの実装は次のようになります。
SomeObject IMyService.DoStuff(string param)
{
var myLibrary = new MyLibrary();
var someObject = myLibrary.DoStuff(param);
return someObject;
}
唯一のオーバーヘッドは、ライブラリでインターフェイスが変更されたときに、サービス インターフェイスでも変更を繰り返さなければならないことですが、実際のビジネス ロジックは複製されません。インターフェイスを共有することもできます。つまり、API は、ライブラリ インターフェイスにコントラクト属性を持たせてもかまわない場合、WCF サービスによって実装されているものと同じインターフェイスを公開します。