2012-04-28 4 views
2

Он работает в интрасети с использованием IIS 7 и отлично работает при включении анонимной аутентификации в диспетчере IIS. Если отключить его и попробуйте запустить его с помощью wcftestclient тогда я получаю следующее сообщение об ошибке,WCF - невозможно получить метаданные

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> 

Как вы можете видеть, что я» m заполнение метаданных с использованием конечной точки mexHttpBinding. Поэтому любые советы приветствуются.

Благодарим Вас, m0dest0.

ответ

5

Удалите конечную точку MEX и оставьте. Конечные точки Mex требуют, чтобы анонимная аутентификация была включена.

3

Хави был прав, я должен был удалить 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 hosted WCF-service + Windows auth in IIS + TransportCredentialOnly/Windows auth in basicHttpBinding