アプリケーションでテスト目的で 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 例外エラーのため失敗します。