如何为ASMX服务实施HTTPS

时间:2013-10-08 07:59:24

标签: iis-7 https asmx

我在IIS7上运行了许多现有的ASMX Web服务,并希望对其进行更改,以便所有请求和响应都必须通过HTTPS进行。

该网站还运行其他网页,如PHP和Classic ASP,因此我无法更改网站根目录以提供HTTPS网页。

如何根据ASMX服务(应用程序)设置此项,以便在有人访问http://www.mydomain.com/MyService/ServiceName.asmx时将其重定向到https://www.mydomain.com/MyService/ServiceName.asmx或返回404错误?

思考和最好的方法?

4 个答案:

答案 0 :(得分:3)

您是否尝试过重写网址?

<rewrite>
    <rules>
        <rule name="Force HTTPS" stopProcessing="true">
            <match url="(.*)/ServiceName.asmx" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
        </rule>
    </rules>
</rewrite>

答案 1 :(得分:1)

一个更简单的解决方案就是在每个服务的构造函数中包含以下代码 - 允许您单独为每个服务决定它。

if (!HttpContext.Current.Request.IsSecureConnection)
{
    var sslUrl = HttpContext.Current.Request.RawUrl.Replace("http://", "https://");

    Response.Clear();
    Response.Write(string.Format("This service requires a SSL connection please go to {0}", sslUrl));
    Response.End();

    // Or simply redirect
    // Response.Redirect(sslUrl);
}

答案 2 :(得分:0)

@oexenhave使用的重定向对我不起作用。取而代之的是,我使用了以下内容(@oexenhave戴了帽子,以完成大部分的出色工作)

#include <iostream>
using namespace std;
    int main(int argc, char** argv) 
        { 
           cout << "You have entered " << argc 
                << " arguments:" << "\n"; 
         
           for (int i = 0; i < argc; ++i) 
               cout << argv[i] << "\n"; 
         
           return 0; 
        } 

将其添加到asmx构造函数中。

答案 3 :(得分:-1)

我建议您使用WCF而不是ASMX http://msdn.microsoft.com/en-us/library/aa480190.aspx

对于您的上述问题,这是否可以解决您的问题?

http://msdn.microsoft.com/en-us/library/aa302409.aspx

...谢谢