2012-04-09 118 views
1

我有一个WCF服务使用https进行通信,json用于响应格式。我不希望我的方法对任何人都可用,所以我将IIS中的身份验证从基本的匿名&更改为基本。通过https进行WCF验证

到目前为止,浏览器要求用户并通过,但我得到了以下错误:

找不到与绑定的WebHttpBinding端点符合计划http的基址。注册的基地址方案是[https]。

我必须改变我的端点以使用身份验证吗?

我的web.config看起来像:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="false" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding name="restBinding"> 
      <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Basic" proxyCredentialType="Basic" /> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    <services> 
     <service name="ContactLibrarySecure.ContactLibraryService"> 
     <endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration="" 
      name="mex" contract="IMetadataExchange" /> 
     <endpoint address="rest" behaviorConfiguration="restBehavior" 
      binding="webHttpBinding" bindingConfiguration="restBinding" 
      name="rest" contract="ContactLibrarySecure.IContact" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="https://192.168.1.31/ContactLibrary2.0HTTPS" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="restBehavior"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 

</configuration> 

回答

1
<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="false" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="soapBinding" maxBufferSize="2000000000" maxBufferPoolSize="2000000000" 
      maxReceivedMessageSize="2000000000"> 
      <security mode="Transport"> 
      <transport clientCredentialType="Windows" proxyCredentialType="Basic" /> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
     <wsHttpBinding> 
     <binding name="mexBinding"> 
      <security mode="Transport"> 
      <transport clientCredentialType="Windows" /> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
     <webHttpBinding> 
     <binding name="restBinding" closeTimeout="00:10:00" sendTimeout="00:10:00" 
      maxBufferSize="2000000000" maxBufferPoolSize="2000000000" maxReceivedMessageSize="2000000000"> 
      <security mode="Transport"> 
      <transport clientCredentialType="Windows" /> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    <services> 
     <service name="ContactLibrarySecure.ContactLibraryService"> 
     <endpoint address="mex" binding="wsHttpBinding" bindingConfiguration="mexBinding" 
      name="mex" contract="IMetadataExchange" /> 
     <endpoint address="rest" behaviorConfiguration="restBehavior" 
      binding="webHttpBinding" bindingConfiguration="restBinding" 
      name="rest" contract="ContactLibrarySecure.IContact" /> 
     <endpoint address="soap" behaviorConfiguration="soapBehavior" 
      binding="basicHttpBinding" bindingConfiguration="soapBinding" 
      name="soap" contract="ContactLibrarySecure.IContact" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="https://192.168.1.31/ContactLibrary2.0HTTPS" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="restBehavior"> 
      <webHttp /> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </behavior> 
     <behavior name="soapBehavior"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 

</configuration> 

这个配置文件解决我的问题。在iis中安装了Windows身份验证后,我从基本更改为Windows身份验证。

相关问题