2016-09-11 4 views
0

私はWCFを少し新しくしています。私はすべての 'ビジネスロジック'を行う(シングルインスタンス)メインアプリケーションを作成しました。データベースやサードパーティのAPIに接続し、管理ユーザーコマンドなどを実行します。このアプリケーションはサーバーマシン上で実行されることを意図しています次のステップは、エンドユーザーがWcfクライアントを使用してリモートでコマンドを実行できるように、先頭にWcfServiceLibraryを作成することです。WCF:メインアプリケーションとは別にWcfServiceLibraryを設計する方法

論理的には、WcfServiceLibraryはメインアプリケーションアセンブリを参照します。私は素朴だと呼びますが、これは主なアプリケーションのオブジェクトやメソッドにアクセスできると思っていました。さて、これは、WcfServiceLibraryプロセス内のメインアプリケーションの複製を作成することによって行われます。 (また、WcfServiceLibrary内からアクセスされたときにsingle-instance applicationが複製されていることも発見しました)

この問題を解決するにはどうすればよいですか?

  • Self-hostメインアプリケーション内のWCFサービス:これまでのところ私は、次のことを考えています可能性が、私は間で通信する
  • 使用IPC技術を「ビジネスロジック」とサービス論理との間に明確な分離を失うことになりますメインアプリケーションとWcfSrviceLibrary:これはサーバークライアントインターフェイスの別のレイヤーを作成するため、余計に思えます(アウトオブプロセスCOMを使用している場合を除いて)
  • 他の方法はありますか?

ご協力いただきありがとうございます。私は、この問題の単純な解決策があると思っています...!

+0

すべてのロジックを別々のアセンブリに抽出し、メインアプリケーションとwcfサービスの両方からこのアセンブリを参照しますか? – Evk

+0

@Evkこのようなアセンブリは、サーバー上で実行されているメインアプリケーションに対して1回、Wcfサービスがインスタンス化されるたびに2回(またはそれ以上)の時間、2回ロードされます。私が必要とするのは、Wcfサービスが内部的に複製せずにメインアプリケーションにアクセスすることです。 – phaedo

+0

サーバーに接続している場合、メインアプリケーションが必要な理由wcfサービスだけを使用するのはなぜですか? – Evk

答えて

0

これは、あなたが探している正確な動作に応じて、WCFラッピングアプリやあなたのメインアプリでこのロジックを置くことができるあなたは...

public static class RealAppCoreHelper 
{ 
    private static RealAppCoreObject m_GlobalAppInstance = null; 

    public static RealAppCoreObject GetGlobalMainInstance() 
    { 
     // return the one and only instance of our main app 

     if (m_GlobalAppInstance == null) 
     { 
      m_GlobalAppInstance = new RealAppCoreObject(); 
     } 

     return m_GlobalAppInstance; 
    } 
} 

探しているものもございます。

+0

これは、WcfServiceLibrary内のメインアプリケーションの複製インスタンスを作成します。 WcfServiceLibraryがサービスをホストするために呼び出される前に、メインアプリケーションがサーバー上で実行されていることを覚えておいてください。 – phaedo

関連する問題