2021年5月6日星期四

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). It fails now, after the site's binding was changed to be https, port 443 and use a valid server authentication certificate. 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:

<?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 in just a part of a route. Can you please tell me what needs to be changed in the web.config above to make it work properly?

https://stackoverflow.com/questions/67428487/going-from-http-to-https-getting-could-not-find-a-base-address-that-matches-sc May 07, 2021 at 11:02AM

没有评论:

发表评论