0

次のページの例に従っています。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>

構成ファイルに構成の更新 (以下) を追加すると、サービスは実行されますが、ServiceMetaDataBehaviour が検出され、SelfDescribingServiceHost 全体が冗長になりますか?

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

設定

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

2 に答える 2

1

問題が見つかりました。ServiceHost クラスで AddServiceEndpoint() を呼び出す前に mexBehaviour を追加するのを忘れたため、このエラーが発生していました。

mexBehavior = new ServiceMetadataBehavior();
Description.Behaviors.Add(mexBehavior);
于 2013-07-26T13:55:53.963 に答える