自定义ServiceHostFactory:找不到合同名称“IMetadataExchange”

时间:2013-07-26 08:29:56

标签: c# asp.net wcf web-services

我正在关注以下页面中的示例。 http://msdn.microsoft.com/en-us/library/aa395224.aspx但运行时出现以下错误

在服务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>

如果我将config update(下面)添加到我的配置文件中,该服务会运行,但这会让它找到ServiceMetaDataBehaviour并真正使整个SelfDescribingServiceHost变得多余?

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

配置

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

2 个答案:

答案 0 :(得分:1)

我发现了这个问题。我收到此错误是因为我忘记在ServiceHost类上调用AddServiceEndpoint()之前添加mexBehaviour

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

答案 1 :(得分:0)

This应该帮助你

错误更改了未找到的合同,这可能是因为缺少端点地址。