HttpWebRequest с веб-сайта Windows Azure

Только сегодня я выпустил свой первый веб-сайт на веб-сайтах Windows Azure. С этого веб-сайта я пытаюсь получить контент из внешнего RSS-канала (https://picasaweb.google.com/), используя HTTPWebRequest.

Я выполняю следующий метод из контроллера 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, щелчок на странице приводит к результатам:

К сожалению, при обработке вашего запроса произошла ошибка.

Я предполагаю, что мне нужно открыть порт брандмауэра, чтобы веб-сервер мог делать запросы к порту 443 из центра обработки данных, но я не могу найти, где и как это сделать.

Любые идеи будут высоко оценены.

Обновление:
Я думаю, что мое первоначальное предположение было правильным — похоже, я не могу сделать запрос SSL из Azure. Вот трассировка стека ниже:

[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


person Gineer    schedule 06.07.2012    source источник


Ответы (3)


SSL-сертификат действителен?

Как принять неверный SSL-сертификат программно

person Frederic Dehu    schedule 06.07.2012
comment
Я пытаюсь подключиться к picasaweb.google.com. Я предполагаю, что у них есть действующий сертификат. Кроме того, я не получаю никаких предупреждений о сертификатах, когда он работает на моей локальной машине. В Azure должно быть что-то особенное. - person Gineer; 07.07.2012

Вы должны иметь возможность делать исходящие HTTP/HTTPS-запросы. Никаких изменений в брандмауэре не требуется. Можно ли получить больше информации об ошибке? Есть ли исключение, на которое вы можете посмотреть? Возможно, хотя бы на время поможет отключение дружественных сообщений об ошибках (показывающих желтый экран смерти).

person mcollier    schedule 06.07.2012
comment
Теперь я обновил свой исходный пост и добавил трассировку с сервера. Кажется, я не могу установить SSL-соединение из Windows Azure. - person Gineer; 07.07.2012

Если я изменю URL-адрес RSS-канала, который я читаю, с Https на Http-ссылку, все будет работать хорошо. К счастью, picasaweb просто перенаправляет на https, поэтому все работает хорошо.

Я хотел бы знать, как решить эту проблему, чтобы код действительно использовал SSL, но в то же время это было решено.

person Gineer    schedule 10.07.2012
comment
Я хотел бы знать, каково решение этой проблемы. Мне нужно получить доступ к внешней веб-службе с помощью https с одного из моих веб-сайтов Azure. - person Corgalore; 08.12.2012