Только сегодня я выпустил свой первый веб-сайт на веб-сайтах 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