0

アプリケーションでテスト目的で Windows Communication Foundation (WCF) を使用しようとしていますが、null オブジェクトを取得しています。私はWCFを初めて使用するので、助けていただければ幸いです。

私が理解していることから、各ホストには1つのサービスタイプ(クラス)があります。テストしたいインターフェースとクラスがいくつかあります。私の目標は、他のインスタンスを持つ 1 つのマスター クラスを作成することなので、複数のホストを実行する必要はありません。以下は私のコードの一部です。

ホスト-

public class AutomationWCFHost
{
    public ServiceHost host;

    public AutomationWCFHost() {
        Uri httpUrl = new Uri("http://localhost:8090/MyFun");
        host = new ServiceHost(typeof(MyFun), httpUrl);
        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.HttpGetEnabled = true;
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
        host.Description.Behaviors.Add(smb);
    }

    public void StartWCF() {
        this.host.Open();
    }

    public void StopWCF(){
        this.host.Close();

インターフェース -

[ServiceContract]
public interface IMyFun {
    [OperationContract]
    string Echo(string msg);

    IDataSources DataSources { [OperationContract]get; [OperationContract]set; }
}


[ServiceContract]
public interface IDataSources {
    [OperationContract]
    void Add(DataSource dataSource);
    [OperationContract]
    void Remove(DataSource dataSource);
}

クラス - 複数のホストを実行する必要がないように、基本クラスを 1 つ作成しようとしています。

public class MyFun : IMyFun {

    public DataSources _dataSources;

    public MyFun () {
        _dataSources = new DataSources();
    }

    public string Echo(string msg) {
        return msg;
    }

    public IDataSources DataSources { get { return _dataSources; } set {_dataSources = (DataSources)value;} }
}

public class DataSources : IDataSources{
....//Several methods and properties
}

テスト -

public void MyTest() {

        EndpointAddress address = new EndpointAddress("http://localhost:8090/MyFun");
        BasicHttpBinding binding = new BasicHttpBinding();
        ChannelFactory<IMyFun> factory = new ChannelFactory<IMyFun>(binding, address);
        IMyFun channel = factory.CreateChannel();
        Assert.AreEqual("Test", channel.Echo("Test"));
        IDataSources dataSources = channel.DataSources;
        dataSources.Add(newDataSource);         
    }

ステップスルーすると、エコーメソッドが正常に実行されますが、実行されると

IDataSources dataSources = channel.DataSources;

データ ソースが null です。これによりそうなる

dataSources.Add(newDataSource);

null 例外エラーのため失敗します。

4

0 に答える 0