2011-08-22 73 views
0

我有以下简单的接口:试验接口WCF主机上失败

public interface IInitialisableWcfService 
{ 
    void Initialise(); 
} 

我敢放置,就会向被用作像这样一个WCF服务类:

public class LocalResourceManager : ILocalResourceManager, IInitialisableWcfService 

ILocalResourceManager是用于为wcf端点设置绑定配置的接口。

里面,我们用于在飞行托管WCF服务的另一个类,我有以下的代码里面测试IInitialisableWcfService接口:

private void Create(Type serviceType) 
    { 
     try 
     { 
      ServiceHost host = null; 
      if (serviceType == typeof(IInitialisableWcfService)) 
      { 
       // create object to initialize. 
      } 
      else 
      { 
       // do something else 
      } 

     catch (ThreadAbortException) 
     { 
      throw; 
     } 
     catch (Exception ex) 
     { 
      //log error 
     } 
    } 

但失败时,它在真实传递给匹配LocalResourceManager经理服务或者实际上实现IInitialisableWcfService的任何其他服务。我也试过这个

if(serviceType is IInitialisableWcfService) 

但是这也行不通。

我不确定这里出现了什么问题。三种可能性:

1)检查和接口的语法是错误的。我觉得这不太可能。

2)由于WCF端点与ILocalResourceManager界面注册,该对象不超过WCF

3)围绕一个类型传递,而不是实际的类暴露其IInitialisableWcfService意味着你不能检查接口

或者可能以上都不是。援助非常感谢。

干杯, 马特

+1

你可以在'Create()'中设置一个断点并检查'serviceType'的值吗?我认为这将是'ILocalResourceManager',它与'IInitialisableWcfService'没有任何关系。 – dlev

+0

抱歉密集,但我不确定我想要查看哪些接口可用的值。我可以设置断点并检查serviceType对象,但它有很多属性,其中没有一个看起来完全有用。 “DeclaringType”为空。 –

+0

只是想知道'FullName'属性是什么。很可能你只会看到实际上作为服务公开的界面。 – dlev

回答

1

serviceTypeType是各执行服务的实际具体类型,所以你只需要检查的服务类型是分配给你想要的界面:

if (typeof(IInitialisableWcfService).IsAssignableFrom(serviceType)) 
{ 
    // Code here 
} 
+0

辉煌,谢谢。我不知道你可以用这种方式检查接口。 –

相关问题