如何在WCF Web服务中使用SSL?

时间:2010-12-21 15:47:10

标签: wcf web-services ssl

我在asp.net中运行了一个Web服务,一切正常。现在我需要使用SSL访问该Web服务中的一些方法。当我使用http://但使用https://联系网络服务时,它非常完美。我得到“没有端点在https:// ...”进行监听。

您能否帮我详细说明如何设置我的web.config以支持对我的Web服务的http和https访问。我试图遵循指导原则,但我无法让它发挥作用。

一些代码:

我的TestService.svc:

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestService
{
    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    public bool validUser(string email) {
        return true;
    }
}

我的Web.config:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
        <behaviors>
            <endpointBehaviors>
                <behavior name="ServiceAspNetAjaxBehavior">
                    <enableWebScript />
                </behavior>
            </endpointBehaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <serviceDebug includeExceptionDetailInFaults="true" />
                </behavior>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="ServiceBehavior" name="TestService">
                <endpoint address="" behaviorConfiguration="ServiceAspNetAjaxBehavior"
                     binding="webHttpBinding" bindingConfiguration="ServiceBinding"
                     contract="TestService" />
            </service>
        </services>
        <bindings>
            <webHttpBinding>
                <binding name="ServiceBinding" maxBufferPoolSize="1000000" maxReceivedMessageSize="1000000">
                    <readerQuotas maxDepth="1000000" maxStringContentLength="1000000" maxArrayLength="1000000" maxBytesPerRead="1000000" maxNameTableCharCount="1000000"/>
                </binding>
            </webHttpBinding>
        </bindings>
</system.serviceModel>

2 个答案:

答案 0 :(得分:1)

请尝试创建 customBinding ,而不是使用 webHttpBinding

<customBinding>
    <binding name="poxBindingHttps" closeTimeout="00:00:20">
        <textMessageEncoding writeEncoding="utf-8" />
        <httpsTransport manualAddressing="true"/>
    </binding>
    <binding name="poxBindingHttp" closeTimeout="00:00:20">
        <textMessageEncoding writeEncoding="utf-8" />
        <httpTransport manualAddressing="true"/>
    </binding>
</customBinding>

您还需要设置 webHttpBehavior ,如下所示:

<behaviors>
    <endpointBehaviors>
        <behavior name="ajaxBehavior">
            <enableWebScript/>
            <webHttp/>
        </behavior>
    </endpointBehaviors>
</behaviors>

最后,您的服务&amp;端点:

<services>
    <service name="TestService">
        <endpoint name="sslDefault" address="" binding="customBinding" bindingConfiguration="poxBindingHttps" behaviorConfiguration="ajaxBehavior" contract="TestService"/>
        <endpoint name="noSslDefault" address="" binding="customBinding" bindingConfiguration="poxBindingHttp" behaviorConfiguration="ajaxBehavior" contract="TestService"/>
    </service>
</services>

希望在创建SSL端点时能为您提供帮助

答案 1 :(得分:0)

听起来IIS没有监听端口443(用于HTTPS的端口)存在更多问题。检查IIS是否已安装证书并且正在侦听安全端口。