微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 http 到 https,获取“无法找到与绑定 WebHttpBinding 的端点的方案 http 匹配的基地址”

如何解决从 http 到 https,获取“无法找到与绑定 WebHttpBinding 的端点的方案 http 匹配的基地址”

这里有一个我正在努力解决的问题:
下面的配置工作正常(站点的绑定是http,端口81)。在站点的绑定更改为 https、端口 443 并使用有效的服务器身份验证证书后,它现在失败了。事件查看器中的错误消息是这样的:

 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,ServiceDescription description,ServiceEndpoint& endpoint,Boolean omitSettingEndpointAddress)
   at System.ServiceModel.Description.ConfigLoader.LookupEndpoint(ServiceEndpointElement serviceEndpointElement,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

“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>

看起来它希望“oauth2”是一个应用程序本身,它有自己的 web.config,而它只是路由的一部分,应该在“api”中处理。需要在上面的 web.config 中进行哪些更改才能使其正常工作?

解决方法

如果要使用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>

enter image description here

要使用 https,您需要将安全模式设置为传输。

更新:

绑定截图:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。