2013-09-25 6 views
0

나는이 실망한 문제를 해결하기 위해 다른 질문에서 여러 가지 제안을 시도해 보았습니다. 일반적으로 IIS에서 사이트를 설정할 때 웹 응용 프로그램은 전송 계층에서 일어나는 일에 대해 다소 "불가지론 적"입니다. 그러나이 특정 앱의 경우 https 바인딩을 적용 할 때 작동하지 않습니다.제공된 URI 스키마 'https'가 유효하지 않습니다.

내 Web.config의는 다음과 같습니다

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="DefaultAPIBinding"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
      <message clientCredentialType="Certificate" algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    </system.serviceModel> 

내 Global.asax.cs는

ContainerBuilder builder = new ContainerBuilder(); 

    //builder.Register<IContactRepository, ContactRepository>(); 
    builder.Register<IResourceFactory, Classes.LightCoreResourceFactory>(); 

    IContainer container = builder.Build(); 

    var configuration = HttpHostConfiguration.Create().SetResourceFactory(new LightCoreResourceFactory(container)); 

    RouteTable.Routes.MapServiceRoute<WebServiceResources>("ws", configuration); 

처럼 보인다하지만이 https 내 IIS 사이트에 바인딩을 추가 할 때마다, 나는 오류 :

The provided URI scheme 'https' is invalid; expected 'http'. 
Parameter name: context.ListenUriBaseAddress 

[ArgumentException: The provided URI scheme 'https' is invalid; expected 'http'. 
Parameter name: context.ListenUriBaseAddress] 
    System.ServiceModel.Channels.TransportChannelListener..ctor(TransportBindingElement bindingElement, BindingContext context, MessageEncoderFactory defaultMessageEncoderFactory, HostNameComparisonMode hostNameComparisonMode) +12800194 
    System.ServiceModel.Channels.HttpChannelListener..ctor(HttpTransportBindingElement bindingElement, BindingContext context) +41 
    System.ServiceModel.Channels.HttpChannelListener`1..ctor(HttpTransportBindingElement bindingElement, BindingContext context) +28 
    System.ServiceModel.Channels.HttpTransportBindingElement.BuildChannelListener(BindingContext context) +133 
    System.ServiceModel.Channels.BindingContext.BuildInnerChannelListener() +63 
    Microsoft.ApplicationServer.Http.Channels.HttpMessageEncodingBindingElement.BuildChannelListener(BindingContext context) +90 
    System.ServiceModel.Channels.BindingContext.BuildInnerChannelListener() +63 
    Microsoft.ApplicationServer.Http.Channels.HttpMessageHandlerBindingElement.BuildChannelListener(BindingContext context) +158 
    System.ServiceModel.Channels.BindingContext.BuildInnerChannelListener() +63 
    System.ServiceModel.Channels.Binding.BuildChannelListener(Uri listenUriBaseAddress, String listenUriRelativeAddress, ListenUriMode listenUriMode, BindingParameterCollection parameters) +125 
    System.ServiceModel.Description.DispatcherBuilder.MaybeCreateListener(Boolean actuallyCreate, Type[] supportedChannels, Binding binding, BindingParameterCollection parameters, Uri listenUriBaseAddress, String listenUriRelativeAddress, ListenUriMode listenUriMode, ServiceThrottle throttle, IChannelListener& result, Boolean supportContextSession) +336 
    System.ServiceModel.Description.DispatcherBuilder.BuildChannelListener(StuffPerListenUriInfo stuff, ServiceHostBase serviceHost, Uri listenUri, ListenUriMode listenUriMode, Boolean supportContextSession, IChannelListener& result) +716 
    System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) +1131 
    System.ServiceModel.ServiceHostBase.InitializeRuntime() +65 
    System.ServiceModel.ServiceHostBase.OnBeginOpen() +34 
    System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) +50 
    System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) +310 
    System.ServiceModel.Channels.CommunicationObject.Open() +36 
    System.ServiceModel.HostingManager.ActivateService(ServiceActivationInfo serviceActivationInfo, EventTraceActivity eventTraceActivity) +91 
    System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity) +598 

[ServiceActivationException: The service '/ws' cannot be activated due to an exception during compilation. The exception message is: The provided URI scheme 'https' is invalid; expected 'http'. 
Parameter name: context.ListenUriBaseAddress.] 
    System.Runtime.AsyncResult.End(IAsyncResult result) +495736 
    System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +178 
    System.ServiceModel.Activation.AspNetRouteServiceHttpHandler.EndProcessRequest(IAsyncResult result) +6 
    System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +129 

오류 메시지가 내 코드에서 확인하거나 다른 위치에 제공하지 않기 때문에 힌트를 얻었고이 문제를 해결하는 방법에 대한 다른 제안을 이미 구현했기 때문에 나는 분실했습니다. 이 앱을 만들기 위해 내가 무엇을 할 수 있는지에 대한 아이디어는 https 바인딩을 허용합니까?

+0

스택 트레이스가 있습니까? 그것을 게시하는 방법에 대해. – shriek

+0

확실한 점 ... 좋은 지적 –

+0

"하지만 IIS 사이트에 https 바인딩을 추가 할 때마다 오류가 발생합니다."IIS 사이트에 https 바인딩을 추가하는 방법을 명확히 할 수 있습니까? IIS 자체를 통해 또는? – Haney

답변

1

@thedr는 말에 자세히 설명하려면, 여기에 우리가했던 것입니다 :

  1. MVC4로 업그레이드하면
  2. 는 다음 클래스가 this CodePlex discussion
에서 바로 찢어 추가 아직 수행하지 않은 경우 당신이 RouteTable.Routes.MapServiceRoute을 수행 할 때
public class HttpsServiceHostFactory : HttpConfigurableServiceHostFactory 
{ 
    public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses) 
    { 

     var host = base.CreateServiceHost(constructorString, baseAddresses); 

     foreach (var httpBinding in from serviceEndpoint in host.Description.Endpoints 
            where serviceEndpoint.ListenUri.Scheme == "https" 
            select (HttpBinding)serviceEndpoint.Binding) 
     { 
      httpBinding.Security.Mode = HttpBindingSecurityMode.Transport; 
     } 

     return host; 
    } 
} 

는 다음에,

과 같아야합니다
RouteTable.Routes. 
     MapServiceRoute<WebServiceResources, HttpsServiceHostFactory>("ws", configuration);