3

タイトルにあるように、ロジックをサービスコントラクトとは別のプロジェクトに保持して、これを分離して非表示にできるようにします。これができると言われているのを見たことがありますが、その方法についての例は見つかりません。

必要なすべてのコードを別のプロジェクトに移動しましたが、テストすると、メソッドではなくタイプのみがクライアントに表示されます。

すべてのメソッドは[OperationContract]、インターフェースでマークされています。

実装ロジックをコントラクトに具体的に接続する方法が必要だと思います。そうでない場合、2つの類似したクラス(例:と? Class : IInterface)があった場合はどうなりますか?WCFはどのクラスを使用するかをどのように知るのでしょうか?Class1 : IInterfaceClass2 : IInterface

4

2 に答える 2

11

私はそれをこのように行いました(悪い名前で申し訳ありませんが、それは概念のためだけです):

1)実装用に個別のプロジェクトを作成しました
2)サービス契約用に個別のプロジェクトを作成しました(循環参照を避けるため)
3)実装プロジェクトへの参照としてサービス契約プロジェクトを
追加しました4)ホストプロジェクトに契約と実装プロジェクトを追加しました
5)Service.svcを完全に更新しましたタイプ名

ここに画像の説明を入力してください

Service.svc本体:

<%@ ServiceHost Language="C#" Debug="true" Service="Implementation.ServiceImplementation" %>
于 2012-08-06T12:24:47.183 に答える
3

WCFはどのクラスを使用するかをどのように知るのでしょうか?

あなたがそれを言うので、様々な設定ファイルで。


私は心からWCFを手動の方法でお勧めします…モチベーションの正しい方法とあなたがやろうとしていることの完全なウォークスルー-私がここに持っているのはそのような実装の適切なポイントです。

3つのアセンブリがあります:、、(Serviceインターフェースのみ)。および両方の参照。インターフェイスを実装するクラスが含まれています。プロキシクラスがあります:ClientServiceContractsServiceClientServiceContractsServiceClient

using System.ServiceModel;
using ServiceContracts;

public class ExampleServiceProxy : ClientBase<IExampleService>, IExampleService
{
    public string ExampleMethod()
    {
        return Channel.ExampleMethod();
    }
}

クライアントのファイルには、サービスのファイルconfigを指すエントリが含まれています。svcサービスのsvcファイルは次のようになります。

<%@ ServiceHost Language="C#" Debug="true" Service="Service.ExampleService" 
    CodeBehind="ExampleService.svc.cs" %>

そして、サービス.svc.csファイルは次のようになります。

using ServiceContracts;

public class ExampleService : IExampleService
{
    public string ExampleMethod()
    {
        return string.Empty;
    }
}

それでおしまい!

于 2012-08-06T12:28:16.877 に答える