0

我正在尝试在我的应用程序中使用 Windows Communication Foundation(WCF) 进行测试,但我得到了一个空对象。我是使用 WCF 的新手,因此将不胜感激。

据我了解,每个主机都有一种服务类型(类)。我有几个要测试的接口和类。我的目标是制作一个包含其他实例的大师班,因此我不必运行多个主机。下面是我的一些代码。

主持人-

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);
}

类 - 我正在尝试创建一个基类,这样我就不必运行多个主机。

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);         
    }

当我逐步完成时,它会很好地运行 echo 方法,但是当它运行时

IDataSources dataSources = channel.DataSources;

数据源为空。这使得它如此

dataSources.Add(newDataSource);

由于空异常错误而失败。

4

0 回答 0