2013-07-26 48 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