简体   繁体   English

从 http 到 https,得到“找不到与具有绑定 WebHttpBinding 的端点的方案 http 匹配的基地址”

[英]Going from http to https, getting "Could not find a base address that matches scheme http for the endpoint with binding WebHttpBinding"

here's a problem I'm struggling with:这是我正在努力解决的一个问题:
The configuration below used to work fine (site's binding was http, port 81).下面的配置可以正常工作(站点的绑定是 http,端口 81)。 It fails now, after the site's binding was changed to be https, port 443 and use a valid server authentication certificate.现在它失败了,在站点的绑定更改为 https、端口 443 并使用有效的服务器身份验证证书之后。 The error message in Event Viewer is this:事件查看器中的错误消息是这样的:

 WebHost failed to process a request.
 Sender Information: System.ServiceModel.ServiceHostingEnvironment+HostingManager/25652103
 Exception: System.ServiceModel.ServiceActivationException: The service '/services/api/oauth2' cannot be activated due to an exception during compilation.  The exception message is: Could not find a base address that matches scheme http for the endpoint with binding WebHttpBinding. Registered base address schemes are [https].. ---> System.InvalidOperationException: Could not find a base address that matches scheme http for the endpoint with binding WebHttpBinding. Registered base address schemes are [https].
   at System.ServiceModel.ServiceHostBase.MakeAbsoluteUri(Uri relativeOrAbsoluteUri, Binding binding, UriSchemeKeyedCollection baseAddresses)
   at System.ServiceModel.Description.ConfigLoader.ConfigureEndpointAddress(ServiceEndpointElement serviceEndpointElement, ServiceHostBase host, ServiceEndpoint endpoint)
   at System.ServiceModel.Description.ConfigLoader.ConfigureEndpoint(StandardEndpointElement standardEndpointElement, ServiceEndpointElement serviceEndpointElement, ContextInformation context, ServiceHostBase host, ServiceDescription description, ServiceEndpoint& endpoint, Boolean omitSettingEndpointAddress)
   at System.ServiceModel.Description.ConfigLoader.LookupEndpoint(ServiceEndpointElement serviceEndpointElement, ContextInformation context, ServiceHostBase host, ServiceDescription description, Boolean omitSettingEndpointAddress)
   at System.ServiceModel.Web.WebServiceHost.AddAutomaticWebHttpBindingEndpoints(ServiceHost host, IDictionary`2 implementedContracts, String multipleContractsErrorMessage, String noContractErrorMessage, String standardEndpointKind)
   at System.ServiceModel.Web.WebServiceHost.OnOpening()
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity)
   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
   --- End of inner exception stack trace ---
   at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
   at System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath, EventTraceActivity eventTraceActivity)
 Process Name: w3wp

web.config for "api" application: “api”应用程序的 web.config:

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="tinCanBinding" closeTimeout="00:01:00">
        </binding>
      </webHttpBinding>
    </bindings>
    <extensions>
      <behaviorExtensions>
        <add name="tinCanWebHttp" type="Company.RestService.TinCan.RestConfiguration.TinCanWebHttpBehaviorExtension, Company.RestService" />
        <add name="ErrorHandler" type="Company.RestService.ApiErrorHandlerBehavior, Company.RestService" />
      </behaviorExtensions>
    </extensions>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 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="true" />
          <ErrorHandler />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="tinCanBehavior">
          <tinCanWebHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="Company.RestService.TinCan.TinCanService">
        <endpoint address="" behaviorConfiguration="tinCanBehavior" bindingConfiguration="tinCanBinding" binding="webHttpBinding" contract="Company.RestService.ServiceContracts.TinCan.ITinCanService">
        </endpoint>
      </service>
      <service name="Company.RestService.CallBackRestService">
        <endpoint address="" binding="wsDualHttpBinding" contract="Company.RestService.ICallBackService">
        </endpoint>
      </service>
    </services>
    <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false">
        </standardEndpoint>
      </webHttpEndpoint>
    </standardEndpoints>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="DSPExceptionModule" />
      <remove name="DSPThrottleModule" />
      <remove name="DSPTraceModule" />
      <remove name="DSPAuthenticationModule" />
      <add type="Company.ServiceHttpModule.DSPExceptionModule,Company.ServiceHttpModule" name="DSPExceptionModule" />
      <add type="Company.ServiceHttpModule.DSPThrottleModule,Company.ServiceHttpModule" name="DSPThrottleModule" />
      <add type="Company.ServiceHttpModule.DSPTraceModule,Company.ServiceHttpModule" name="DSPTraceModule" />
      <add type="Company.ServiceHttpModule.DSPAuthenticationModule,Company.ServiceHttpModule" name="DSPAuthenticationModule" />
    </modules>
  </system.webServer>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Common.Logging.Core" publicKeyToken="af08829b84f0328e" culture="neutral" />
        <bindingRedirect oldVersion="3.0.0.0-3.4.1.0" newVersion="3.4.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

It looks like it expects "oauth2" to be an application itself which has its own web.config while it's just a part of the route and is supposed to be handled within "api".看起来它希望“oauth2”是一个应用程序本身,它有自己的 web.config,而它只是路由的一部分,应该在“api”中处理。 What needs to be changed in the web.config above to make it work properly?需要在上面的 web.config 中进行哪些更改才能使其正常工作?

If you want to use https, please refer to the following configuration:如果要使用https,请参考以下配置:

<system.serviceModel >
        <services>
            <service name="WcfService30.Service1"
                     behaviorConfiguration="ServiceBehaviour" >
                <endpoint address=""
                          binding="webHttpBinding"
                bindingConfiguration="webHttpTransportSecurity"
                behaviorConfiguration="web"
                contract="WcfService30.IService1" />
                <endpoint address="mex"
                          binding="mexHttpsBinding"
                          contract="IMetadataExchange" />
            </service>
        </services>
        <bindings>
            <webHttpBinding>
                <binding name="webHttpTransportSecurity">
                    <security mode="Transport" />
                </binding>
            </webHttpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehaviour">
                    <serviceMetadata httpsGetEnabled="true"
                                     httpGetEnabled="false"/>
                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
            <endpointBehaviors>
                <behavior name="web">
                    <webHttp helpEnabled="true"/>
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
    </system.serviceModel>

在此处输入图像描述

To use https, you need to set the security mode to Transport.要使用 https,您需要将安全模式设置为传输。

UPDATE:更新:

A screenshot of a binding:绑定截图:

在此处输入图像描述

暂无
暂无

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

相关问题 WCF:找不到与绑定WebHttpBinding的端点的方案http匹配的基地址。 注册的基址方案为[https] - WCF: Could not find a base address that matches scheme http for the endpoint with binding WebHttpBinding. Registered base address schemes are [https] WCF-找不到与https端点的方案http匹配的基地址 - WCF - Could not find a base address that matches scheme http for the https endpoint 找不到与绑定WSHttpBinding的端点的scheme http匹配的基址 - Could not find a base address that matches scheme http for the endpoint with binding WSHttpBinding 找不到与绑定MetadataExchangeTcpBinding自托管端点的终结点计算机匹配方案net.tcp的基地址 - Could not find a base address that matches scheme net.tcp for the endpoint with binding MetadataExchangeTcpBinding self hosting 找不到与绑定MetadataExchangeTcpBinding的端点的方案net.tcp匹配的基地址 - Could not find a base address that matches scheme net.tcp for the endpoint with binding MetadataExchangeTcpBinding webHttpBinding WCF服务通过HTTP响应,但不通过HTTPS响应 - webHttpBinding WCF service responds over HTTP but not HTTPS 将 WebService Endpoint 从 HTTP 更改为 HTTPS - Change WebService Endpoint from HTTP to HTTPS 提供的URI方案“http”无效; 预期&#39;https&#39; - The provided URI scheme 'http' is invalid; expected 'https' WCF http和https端点一个合同 - WCF http & https endpoint one contract 获取错误“此集合已包含带有方案http的地址”,本地计算机上有WCF - Getting Error “This collection already contains an address with scheme http” with WCF on local machine
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM