0

我今天刚刚在 Windows Azure 网站上发布了我的第一个网站。从这个网站,我正在尝试使用 HTTPWebRequest 从外部 RSS 提要 (https://picasaweb.google.com/) 获取内容。

我从 MVC 控制器中执行以下方法,然后用生成的 RSS XML 填充模型:

    private static string HttpGet(String url)
    {
        HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
        String result = null;
        using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse)
        {
            StreamReader reader = new StreamReader(resp.GetResponseStream());
            result = reader.ReadToEnd();
        }
        return result;
    }

当我对此进行测试时,这在我的本地计算机上运行良好,但是一旦将站点上传到 Windows Azure 网站,单击页面结果:

抱歉,处理您的请求时出现了一个错误。

我的猜测是我需要打开一个防火墙端口以允许 Web 服务器从数据中心内部发出端口 443 请求,但我找不到在哪里或如何做到这一点。

任何想法将不胜感激。

更新:
我认为我最初的假设是正确的——我似乎无法从 Azure 内部发出 SSL 请求。这是下面的堆栈跟踪:

[WebException: The request was aborted: Could not create SSL/TLS secure channel.]
   System.Net.HttpWebRequest.GetResponse() +6115603
   Alien.Models.PicassaWebReader.HttpGet(String url) +61
   Alien.Models.PicassaWebReader.GetPicassaWebFeed() +17
   Alien.Controllers.PhotosController.Index() +14
   lambda_method(Closure , ControllerBase , Object[] ) +62
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +208
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
   System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +191
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
   System.Web.Mvc.Controller.ExecuteCore() +116
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8969201
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

我也将此问题发布到:http ://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/622f0dbc-bbfd-4d3e-b344-148a79ddeedc

4

3 回答 3

1

SSL 证书是否有效?

如何以编程方式接受无效的 SSL 证书

于 2012-07-06T21:18:51.747 回答
0

您应该能够很好地发出出站 HTTP/HTTPS 请求。不需要更改防火墙。您能否从错误中获得更多信息?有没有可以查看的异常?也许至少暂时关闭友好的错误消息(显示黄屏死机)会有所帮助。

于 2012-07-06T20:32:48.550 回答
0

如果我将 URL 更改为我正在读取的 RSS 提要,从 Https 到 Http 链接,一切正常。幸运的是,picasaweb 只是重定向到那里的 https,所以一切正常。

我很想知道如何解决这个问题以允许代码实际使用 SSL,但与此同时,这个问题已经解决了。

于 2012-07-10T08:18:47.930 回答