Windows Communication Foundation空引用错误

时间:2013-08-28 22:43:46

标签: c# wcf interface

我正在尝试使用Windows Communication Foundation(WCF)在我的应用程序中进行测试,并且我得到一个null对象。我是新手使用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为null。这样就可以了。

dataSources.Add(newDataSource);
由于null异常错误,

失败。

0 个答案:

没有答案