代码之家  ›  专栏  ›  技术社区  ›  jedmao

WebService只能作为HTTP提供,但我需要HTTPS。这里最好的技巧是什么?

  •  2
  • jedmao  · 技术社区  · 17 年前

    是的,所以每个人都知道天气预报,对吧?他们有这个网址…

    http://[apicode].api.wxbug.net/weatherservice.asmx

    工作得很好,但是他们不提供安全连接的HTTPS替代方案。

    这里使用的最佳技术是什么?我知道我需要创建自己的页面或服务,这样它就可以在https上点击“我的”服务,但是在后端,它会取消weatherbug的服务调用。

    我将如何在自己的Web服务(asmx)中编写它?

    这是我在ASPX页面上尝试的,但它不起作用…

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(
            new StreamReader(
                WebRequest.Create(
                    String.Format("{0}?{1}",
                        "http://[apicode].api.wxbug.net/weatherservice.asmx",
                        Request.QueryString.ToString()
                    )
                ).GetResponse()
                .GetResponseStream()
            ).ReadToEnd()
        );
    }
    
    5 回复  |  直到 17 年前
        1
  •  5
  •   Allen Rice 0x6A75616E    17 年前
    1. 创建Web服务。
    2. 将Weather Eye的服务添加为对该Web服务的Web引用。
    3. 在您的Web服务上复制WeatherEye拥有的所有调用,并从这些方法中在您的Web服务上调用Weather Eyes服务,并让您的Web服务返回WeatherEyes Web服务的结果。
    4. 在HTTP/HTTPS上承载Web服务。
    5. 让你的客户给你的网络服务打电话。

    您的客户机无论如何都必须连接到一个Web服务,所以您也可以将这个逻辑放到另一个Web服务中。

        2
  •  1
  •   Brad Bruce    17 年前

    什么阻止您使用HTTP地址?网络上的设备是否阻止HTTP访问?

    如果没有任何东西阻塞HTTP,那么通过尝试将HTTPS用于“安全”的URL,您将一无所获。(不像天气预报是专有信息)

        3
  •  1
  •   Zhaph - Ben Duguid    17 年前
    1. 向Web项目添加服务引用:

      • 右键单击项目,选择“添加服务引用…”
      • 在对话框中提供地址,选择您感兴趣的服务。
    2. 在项目中创建新的Web服务:

      • 右键单击首选文件夹,选择“添加新项目…”
      • 选择“Web服务”,给它合理的名称等。
    3. 开始编码:

      • 如果要从脚本调用此服务,请在页面顶部找到注释,说明:

      //若要允许使用ASP.NET AJAX从脚本调用此Web服务,请取消对以下行的注释。

      • 即使您不使用ASP.NET AJAX,也需要遵循该指令。
      • 创建复制要在WeatherBug API上调用的方法的方法

    以下内容可能会在开始时提供给您:

    // I don't know the WeatherBug Api, but you should get the idea
    // Decorate the method as a WebMethod, otherwise you won't be able to call it
    [WebMethod]
    public string GetLiveWeatherByCityCode(int Length, // Is this an int?
                                           string CityCode,
                                           int UnitType,
                                           string ACode) {
      // Create a new instance of the client that was generated for you
      // when you added the Service Reference, using the name specified 
      // in the web.config (again, added for you by VS).
      using (var client = new 
               WeatherBugServiceClient("BasicHttpBinding_WeatherBugService"))
      {
        // Either return the call directly, or you could process the result before
        // returning it.
        return client.GetLiveWeatherByCityCode(Length, CityCode, UnitType, ACode);
      }
    }
    

    然后,您应该能够以通常的方式,在HTTPS下,在Web服务上调用这个Web方法。

        4
  •  0
  •   David Thornley    17 年前

    使用HTTP有什么问题?

    如果你想用https验证天气信息,你就走运了。如果用户只使用HTTP,那么就没有办法确保你在和它交谈,或者确保你得到了正确的输出,如果有人处于中间攻击状态。你可以有自己的中间人程序,它通过HTTP与WeatherBug通信并转换为HTTPS,但是你不知道你的中间人程序实际上正在获取WeatherBug的数据。

    另一方面,如果你不认为有人会费心设置攻击来向你提供虚假数据,希望在下雨的时候让你计划一次野餐,那这两者有什么区别呢?

        5
  •  0
  •   Matthew Whited    17 年前

    你可以用一些符合 Stunnel …甚至可以使用自己的SSL代理

    (可以使用restful wcf创建一个简单的代理来重定向调用)