1

WCFサービスと通信してデータにアクセスするプロジェクトがあります。サーバーがローカルであり、SQLストアドプロシージャを使用してデータベースに直接クエリを実行する場合があります。

説明するために、私が次の方法を持っていると仮定します:

Asset GetAsset(int AssetID);

このメソッドは、WCFサービスによって公開されるか、データベースに直接クエリを実行するときにローカルで使用されます。私が抱えている問題は、WCFサービスの公開されたメソッドのAssetオブジェクトがローカルメソッドとは異なることです。つまり、公開されたサービス方法は次のとおりです。

WcfService.Asset GetAsset(int AssetID);

直接DBクエリ方法は次のとおりです。

LocalNamespace.Asset GetAsset(int AssetID);

可能ですが、必要に応じてWcfServiceを削除できるようにしたいので、DirectDBクエリメソッドにWcfServiceAssetオブジェクトを使用させたくありません。理想的には、ローカルとサービスの両方で使用できる別のアセンブリに共通のオブジェクト/インターフェイスをバンドルしたいと思います。

選択肢はありますか?参照アセンブリオプションはオンになっていますが、十分に理解していない可能性があります。

4

3 に答える 3

2

あなたは間違いなくそれを行うことができます、それはWCFの大きな強みの1つです。[DataContract]クラスや[ServiceContract]インターフェースなどを含む別のアセンブリを作成します。その後、WCFサービス、WCFクライアント、またはWCFの外部で好きなように使用できます。サービス参照を追加するときに[参照アセンブリ]オプションを使用して、コントラクトアセンブリが確実に使用されるようにします。

あなたはそれよりも1つ上手く行くことができます。サービスコントラクト実装クラスを別の別のアセンブリに移動します。その後、サービスコールを経由せずに、インプロセスで直接呼び出すことができます。これにより、WCFサービスプロジェクトが.svcファイルのコレクションとになりますweb.config

于 2012-12-20T09:15:26.630 に答える
1

(サービス参照の追加)ダイアログで、(詳細...)ボタンを押し、(参照されるアセンブリで型を使用する)をオンにすると、問題は解決しますが、共有クラスを別のアセンブリに配置し、両方で参照する必要がありますクライアントとサービス。

于 2012-12-20T09:17:51.367 に答える
1

Data Access Layer(DAL)オブジェクトを、おそらく別のプロジェクトですべて一緒に作成します。

xこれを使用して、リフレクションやその他の方法でアセンブリにアクセスする代わりに、すべての呼び出しを処理します。前述のように、WCFとローカルプロジェクトの両方でオブジェクトへの参照を追加します。このアクセスレイヤーでは、Entity Frameworkまたはなど、何でも使用できますNHibernateDALオブジェクトを使用して、データベースに移動するメソッドを呼び出します。

Public Class ServiceDAL
{
  public Asset GetAsset(int id)
  {
    //Get your asset
    return asset;
  }
}
于 2012-12-20T09:33:57.720 に答える