4

IIS 7 を使用してイントラネットで実行されており、IIS マネージャーで匿名認証を有効にすると正常に動作します。無効にして wcftestclient を使用して実行しようとすると、次のエラーが発生します。

Error: Cannot obtain Metadata from http://myserver/testing/eval.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address.  For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error    URI: http://myserver/testing/eval.svc    Metadata contains a reference that cannot be resolved: 'http://myserver/testing/eval.svc'.    The HTTP request is unauthorized with client authentication scheme 'Anonymous'. 

これは私の web.config ファイルです。

<system.serviceModel>
<bindings>
    <wsHttpBinding>
        <binding name="Binding1">
            <security mode="Transport">
                <transport clientCredentialType="Windows" />
                <message establishSecurityContext="true" />
            </security>
        </binding>
    </wsHttpBinding>
    <basicHttpBinding>
        <binding name="httpBinding">
            <security mode="Transport">
                <transport clientCredentialType="Windows" />
            </security>
        </binding>
    </basicHttpBinding>     
</bindings>

<services>
  <service behaviorConfiguration="ServiceBehavior" name="EvalServiceLibrary.EvalService">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1" contract="EvalServiceLibrary.IEvalService">
      <identity>
        <dns value="myserver.mydomain.com" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="basic" binding="basicHttpBinding" contract="EvalServiceLibrary.IEvalService" />
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true" />
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>

ご覧のとおり、mexHttpBinding エンドポイントを使用してメタデータを入力しています。ですから、どんなアドバイスでも大歓迎です。

ありがとう、m0dest0。

4

2 に答える 2

5

MEX エンドポイントを削除してそのままにします。Mex エンドポイントでは、匿名認証を有効にする必要があります。

于 2012-04-28T12:04:33.903 に答える
3

Javi は正しかったので、mex エンドポイントを削除する必要がありました。念のため、これが web.config の最終バージョンです。

<system.serviceModel>
<bindings> 
    <basicHttpBinding> 
        <binding name="basicBinding"> 
            <security mode="TransportCredentialOnly"> 
                <transport clientCredentialType="Windows" /> 
            </security> 
        </binding>
    </basicHttpBinding> 
</bindings> 
<services> 
    <service name="EvalServiceLibrary.EvalService" behaviorConfiguration="ServiceBehavior"> 
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicBinding" contract="EvalServiceLibrary.IEvalService"> 
        </endpoint> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
        <behavior name="ServiceBehavior"> 
            <serviceDebug includeExceptionDetailInFaults="true" /> 
            <serviceMetadata httpGetEnabled="false" />
        </behavior> 
    </serviceBehaviors> 
</behaviors>
</system.serviceModel>

詳細はこちら。 IIS がホストする WCF サービス + IIS の Windows 認証 + basicHttpBinding の TransportCredentialOnly/Windows 認証

于 2012-04-29T01:46:32.673 に答える