简体   繁体   English

WCF - 无法获取元数据

[英]WCF - Cannot obtain Metadata

It is running in an Intranet using IIS 7 and it works fine whenever I enable Anonymous Authentication in the IIS Manager. 它使用IIS 7在Intranet中运行,只要我在IIS管理器中启用匿名身份验证,它就可以正常工作。 If I disable it and try to run it using wcftestclient then I get the following error, 如果我禁用它并尝试使用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'. 

This is my web.config file, 这是我的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>

As you can see I'm populating metadata using mexHttpBinding endpoint. 如您所见,我正在使用mexHttpBinding端点填充元数据。 So any advice is welcome. 所以欢迎任何建议。

Thank you, m0dest0. 谢谢,m0dest0。

Remove the MEX endpoint and leave . 删除MEX端点并离开。 Mex endpoints require anonymous authentication to be enabled. Mex端点需要启用匿名身份验证。

Javi was right, I had to remove the mex endpoint and just for the records, this is the final version of the web.config: 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>

more details here, IIS hosted WCF-service + Windows auth in IIS + TransportCredentialOnly/Windows auth in basicHttpBinding 这里有更多细节, IIS在IIS + TransportCredentialOnly / Windows身份验证中托管WCF服务+ Windows身份验证basicHttpBinding

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM