2013-07-26 20 views
0

我下面从以下页面的例子。 http://msdn.microsoft.com/en-us/library/aa395224.aspx,但运行时出现以下错误定制ServiceHostFactory:合同名称“IMetadataExchange接口”找不到

无法在服务MyServiceLibrary实现的合同列表中找到合同名称'IMetadataExchange'。将ServiceMetadataBehavior添加到配置文件或直接添加到ServiceHost以启用对此合同的支持。

的MyServiceHostFactory是相当多从该页复制和我加入到我的路由表像如下。

RouteTable.Routes.Add(new ServiceRoute("V1", new MyServiceHostFactory(), typeof(MyServiceLibrary))); 

我的配置文件

<appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 

    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 

    <system.serviceModel>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> 
    </system.serviceModel> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <directoryBrowse enabled="true" /> 
    </system.webServer> 

</configuration> 

如果我添加的配置更新(如下图),以我的配置文件中的服务运行,但使得它找到ServiceMetaDataBehaviour,真正使整个SelfDescribingServiceHost冗余?

ServiceMetadataBehavior mexBehavior = this.Description.Behaviors.Find<ServiceMetadataBehavior>(); 

配置

<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

回答

0

我发现这个问题。因为我忘记在ServiceHost的类

mexBehavior = new ServiceMetadataBehavior(); 
Description.Behaviors.Add(mexBehavior); 
0

这会帮助你

http://stackoverflow.com/questions/3871827/imetadataexchange-could-not-be-found-in-the-list-of-contracts-implemented-by-the 

而且错误不改变合同发现,这可能是因为丢失的端点地址。

+0

我添加端点到我的代码,但它仍然给出了同样的错误调用AddServiceEndpoint()之前添加mexBehaviour我得到这个错误。这个链接没有帮助,我在创建这个问题时看到了它。当我打电话AddServiceEndpoint上我的课从继承的ServiceHost除非我在serviceBehaviors中失败的目的的配置加上它只是立即引发。 – LivingOnACloud