无法获得使用https / ssl的WCF服务

时间:2015-05-29 01:29:08

标签: web-services wcf azure wcf-rest

我知道过去这个问题已经有了答案,但经历了很多问题之后我仍然遇到问题,所以我希望有人可以看看这个配置并告诉我它的去向错了...

以下是我正在部署的自托管其他WCF服务的配置:

<?xml version="1.0" encoding="utf-8" ?>
    <configuration>

        <appSettings>
            <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
        </appSettings>
        <system.web>
            <customErrors mode="Off"/>    
            <compilation debug="true" />
        </system.web>

        <system.serviceModel>
            <services>
                <service name="SampleService.SampleService" behaviorConfiguration="ServiceBehavior" >
                    <endpoint address="" binding="webHttpBinding" bindingConfiguration="webHttpTransportSecurity" behaviorConfiguration="web" contract="SampleService.ISampleService"/>
                    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
                </service>
            </services>
            <bindings>
                <webHttpBinding>
                    <binding name="webHttpTransportSecurity">
                        <security mode="Transport" >
                            <transport clientCredentialType="None" proxyCredentialType="None" />
                        </security>
                    </binding>
                </webHttpBinding>
            </bindings>   
            <behaviors>
                <endpointBehaviors>
                    <behavior name="web">
                        <webHttp />
                    </behavior>
                </endpointBehaviors>
                <serviceBehaviors>
                    <behavior name="ServiceBehavior">
                        <serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>
                        <serviceDebug includeExceptionDetailInFaults="false"/>
                    </behavior>
                </serviceBehaviors>
            </behaviors>
            <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
        </system.serviceModel>
    </configuration>

服务器上的错误表明服务想要使用http而不是https,我不能在生活中找出配置有什么问题。我已经过了一天中的大部分时间。这是一项相对简单的小服务。

2 个答案:

答案 0 :(得分:1)

服务元素中的服务端点地址是 relative ,这意味着它们相对于服务的基地。默认情况下,基本地址使用 http 方案,这是您的服务正在使用的方案。 因此,如果您的基地址为http://localhost/myservice,则您的两个端点将为http://localhost/myservicehttp://localhost/myservice/mex

您可以通过包含方案(https)和完整的Uri来使您的端点地址绝对。例如,“https://localhost/myservice”和“https://localhost/myservice/mex”代替“”和“mex”就像现在一样。

或者,您只需为使用 https 方案的服务添加基地址即可。

<host>
  <baseAddresses>
    <add baseAddress="https://localhost/myservice"/>
  </baseAddresses>
</host>

这假设您已注意注册SSL证书以支持传输安全性。如果你还没有,那么你也需要这样做。

作为旁注,我建议将 ASP.NET Web API 用于RESTful Web服务而不是WCF。 Here is a brief intro如果您不熟悉它,可以帮助您入门。

答案 1 :(得分:0)

不幸的是,这再次提醒我,我不应该尝试将来自第三方的原型代码拼凑起来,除非我非常确定它是如何设置的。从头开始(我最终做的)本来会更好。事实证明,我如何配置它是完全有效的,但解决方案中的天蓝色服务打包和部署过程是错误的。

对不起浪费的带宽,感谢所有试图帮助我的人。