13

これが何度も尋ねられ、何度も答えられたことは知っていますが、提供されているすべてのサンプルが機能するはずですが、今日は機能したくないようです。

ホストを起動しようとすると、次のエラーが発生し続けます。

「コントラクト名 'IMetadataExchange' は、TraceService サービスによって実装されたコントラクトのリストに見つかりませんでした。ServiceMetadataBehavior を構成ファイルまたは ServiceHost に直接追加して、このコントラクトのサポートを有効にしてください。」

私のサービスは、Microsoft の例に従って、マネージド Windows サービス ホストでホストされています: http://msdn.microsoft.com/en-us/library/ms733069%28v=vs.90%29.aspx

そして、ここに私の素敵でシンプルな設定があります:

  <system.serviceModel>
    <services>
      <service name="Daff.Lae.Service.TraceService">
        <endpoint address="" binding="wsHttpBinding" name="TraceService" contract="Contracts.Service.ITraceService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/TraceService" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

もちろん、次の行を削除するとエラーが発生しない場合、問題はより興味深いものになります。

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

どんな助けでも非常に非常に高く評価されます:)

4

3 に答える 3

25

または のいずれかを許可するには、構成behaviorConfigurationservice要素にa を必ず指定してください。httpGethttpsGet

という名前の serviceBehavior が既に定義されていることがわかります。あとは、要素にDefaultBehavior追加するだけなので、その行は次のようになります。behaviorConfiguration="DefaultBehavior"service

<service name="Daff.Lae.Service.TraceService" behaviorConfiguration="DefaultBehavior">

サービスの動作を明示的に指定しない場合、デフォルトで HTTP GET と HTTPS GET の両方が許可されず、メタデータは公開されません。

于 2011-09-20T21:51:39.273 に答える
2

WS-Http を使用しているため、HTTPS プロトコルにバインドしているため、正しい MEX バインディングを使用する必要があります。

<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 

ベースアドレスを https に変更します。

または (逆に) wsHttp バインディングを basicHttp バインディングに変換すると、作業が開始されます。

于 2011-09-20T21:45:41.680 に答える
0
`<services>
  <service  name="MyService.Service1" behaviorConfiguration="Service1" >

</services>
 `

 where MyService is the application name , Service1 is the default implementation class for IService1
 `
 <protocolMapping>
  //Remove any http or https bindings provided  
</protocolMapping>   
 `
It should help when you use WCF Application Project
于 2018-01-04T15:02:25.563 に答える