WCF + IIS6 + HTTPS +基本身份验证

时间:2011-08-15 12:03:08

标签: wcf https iis-6

我已经看到很多关于此的问题,我花了一天时间研究并尝试修复它,但我画了一个空白。

我想将WCF服务部署到使用HTTPS连接并使用基本身份验证的服务器上。这是我的服务web.config

我使用一个非常简单的计算器作为测试,它有一个方法可以将两个数字相加。

<configuration>

    <system.web>
        <compilation debug="false" targetFramework="4.0" />
        <customErrors mode="Off" />
    </system.web>

    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="UsernameWithTransport">
                    <security mode="Transport">
                        <transport clientCredentialType="Basic" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>

        <services>
            <service name="Service">
                <endpoint address="https://myserver.mydomain.co.uk/CalculatorService"
                          binding="wsHttpBinding"
                          bindingConfiguration="UsernameWithTransport"
                          name="BasicEndpoint"
                          contract="TestCalculator" />
            </service>
        </services>

        <behaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="true"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

在IIS 6.0中,我启用了基本身份验证并需要HTTPS。

我可以浏览.svc文件并询问我的凭据。我提供它们并显示默认页面。不过它说:

  

您已创建了一项服务。

     

要测试此服务,您需要创建一个客户端并将其用于   打电话给服务。您可以使用svcutil.exe工具执行此操作   命令行,语法如下:

     

svcutil.exe的   http://myserver.mydomain.co.uk/CalculatorService/Service.svc?wsdl

     

这将生成一个配置文件和一个包含的代码文件   客户端类。将这两个文件添加到客户端应用程序并使用   生成的客户端类来调用服务。例如:......

基本上,问题似乎是.wsdl的路径是http://而不是https://我觉得我不明白为什么。

我现在正在尝试创建一个C#控制台应用程序来测试使用该服务。我无法直接添加对.svc路径的引用,因为它只是在循环中四处走动,询问我的用户名和密码。如果我添加对.svc?wsdl的引用,那么它确实有效但随后调用该服务会产生“Method not allowed”,因为它试图使用HTTP而不是HTTPS。

希望我已经足够好了。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您需要HTTPS,但同时只允许通过HTTP使用WSDL。改变这个:

<serviceMetadata httpGetEnabled="true"/>

对此:

<serviceMetadata httpsGetEnabled="true"/>

现在您将能够通过https://..../....svc?wsdl访问WSDL,但您仍需要进行身份验证,因为身份验证对于您部署的站点而言是全局的。