0

После добавления нового модуля к Orchard решению в VS 2013, в индексном методе Начального контроллера, И сохранение IOrchardServices в сессии, как:Предоставление услуг Orchard, доступных в веб-формах: Отключить услуги утилизации Orchard IOrchardService?

public class HomeController : Controller 
    { 
     public IOrchardServices Services { get; set; } 

    public HomeController(IOrchardServices services) 
    { 
     Services = services; 
     T = NullLocalizer.Instance; 
    } 

    public Localizer T { get; set; } 

    public ActionResult Index() 
    { 
      Session["OrchardCMServices"] = Services; 
      return Redirect("/OrchardLocal/modules/HelloWorld/default.aspx"); 
    } 

После сохранения Orchard службы в сеансе, перенаправление к WebForms Странице: default.aspx делается. Это делает перенаправление успешно.

Проблема заключается в том, что при доступе к вышеуказанному сеансу ["OrchardCMServices"] на моей странице ASPX ContentManager удаляется, и я не могу запросить методы GET. Ошибка: Объект удален

Как отключить/запретить удаление объектов сеанса при перенаправлении с MVC на Asp.NET? Я не нашел никаких modules настроек в web.config приложения MVC.

Есть ли способ сделать сервисы Orchard (ContentManager) доступными в веб-формах?

enter image description here

+0

Не похоже, что люди знают, как сделать Orchard совместимым с Webforms. Возможно, если вы обновите вопрос, описывающий, какова конечная цель, может быть другой способ представить данные на эту внешнюю страницу? – rtpHarry

+0

@rtpHarry: Спасибо за ответ и предложения. Да, есть способы представления данных на внешнюю страницу. Как запрос базы данных SQL CE непосредственно в приложениях веб-форм. Это был один из способов пойти. Но, поскольку мы использовали ORCHARD CMS, моя единственная цель состояла в том, чтобы проверить, есть ли способ сделать Orchard Services доступными для страницы веб-форм слишком. –

+0

Я просто делаю некоторую работу в папке OrchardDocs и [наткнулся на нее статья] (http://docs.orchardproject.net/Documentation/Orchard-module-loader-and-dynamic-compilation#RenderingWebFormsViews). Его неполное и нацеленное на Orchard v0.5, но я подумал об этой теме и подумал, что по крайней мере опубликую ее. – rtpHarry

ответ

1

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

Запрос: экземпляр зависимостей создается для каждого нового HTTP-запроса и уничтожается после обработки запроса. Используйте это, выведя ваш интерфейс из IDependency. Объект должен быть достаточно дешевым для создания. http://docs.orchardproject.net/Documentation/How-Orchard-works

И вы можете увидеть, что IOrchardServices является IDependency.

public interface IOrchardServices : IDependency {... 

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

var orchardServices = WorkContext.Resolve<IOrchardServices>(); 

Или, если ваш модуль имеет контроллер, который рендеринг страницы вы можете придать зависимость как нормальные.

+0

Хм ... Я вижу суть. Итак, что делать, если я хочу получить доступ к OrchardService на одной из моих страниц WEB FORMS (.aspx) на самом деле и НЕ в любых MVC-представлениях. Есть ли способ сделать это ? Страницы ASPX присутствуют в модуле Sample HelloWorld, который я создал, как описано в Orchard.Как вы можете видеть в методе INDEX() контроллера, я просто перенаправлен на страницу ASPX и на странице ASPX, я попробовал прочитать значение Session, где я затем снова запрашиваю Content Manager как: int itemID = 12; ContentItem iTem = this.Services.ContentManager.Get (itemID) ;. Это строка, которая вызывает ошибку на странице ASPX. –

+0

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

+0

Благодарим вас за то, что вы нашли способ сделать сервисы Orchard доступными в веб-формах. Даже сам я сейчас пришел к выводу, что почти невозможно сделать эти сервисы Orchard доступными на странице Web Forms. Поскольку в веб-формах было несколько страниц, которые необходимы для данных, поэтому для Time Being мы запрашиваем эти таблицы отдельно, используя способ Ado.NET. Дайте мне знать, если вы знаете некоторые другие альтернативные способы .... –