WCF и ASP.NET - ссылка на объект выбрасывания Server.Execute, не установленная для экземпляра объекта - PullRequest
0 голосов
/ 29 марта 2010

У меня есть страница ASP.NET, которая вызывает службу WCF. Эта служба WCF использует BackgroundWorker для асинхронного создания страницы ASP.NET на моем сервере. Как ни странно, когда я выполняю

WCF Сервис

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public void PostRequest(string comments)
{
   // Do stuff


   // If everything went o.k. asynchronously render a page on the server. I do not want to
   // block the caller while this is occurring. 
   BackgroundWorker myWorker = new BackgroundWorker();
   myWorker.DoWork += new DoWorkEventHandler(myWorker_DoWork);
   myWorker.RunWorkerAsync(HttpContext.Current);
}

private void myWorker_DoWork(object sender, DoWorkEventArgs e)
{
  // Set the current context so we can render the page via Server.Execute
  HttpContext context = (HttpContext)(e.Argument);
  HttpContext.Current = context;

  // Retrieve the url to the page
  string applicationPath = context.Request.ApplicationPath;
  string sourceUrl = applicationPath + "/log.aspx";
  string targetDirectory = currentContext.Server.MapPath("/logs/");

  // Execute the other page and load its contents
  using (StringWriter stringWriter = new StringWriter())
  {
    // Write the contents out to the target url
    // NOTE: THIS IS WHERE MY ERROR OCCURS
    currentContext.Server.Execute(sourceUrl, stringWriter);

    // Prepare to write out the result of the log
    targetPath = targetDirectory + "/" + DateTime.Now.ToShortDateString() + ".aspx";
    using (StreamWriter streamWriter = new StreamWriter(targetPath, false))
    {
      // Write out the content to the file
      sb.Append(stringWriter.ToString());
      streamWriter.Write(sb.ToString());
    }
  }
}

Как ни странно, когда выполняется метод currentContext.Server.Execute, он выдает ошибку «ссылка на объект не установлена ​​на экземпляр объекта». Причина, по которой это так странно, заключается в том, что я могу посмотреть на свойства currentContext в окне просмотра. Кроме того, сервер не является нулевым. Из-за этого я понятия не имею, откуда эта ошибка.

Может ли кто-нибудь указать мне правильное направление, что может быть причиной этого?

Спасибо!

1 Ответ

3 голосов
/ 29 марта 2010

Вы используете HttpContext - обычно не , доступный для WCF по умолчанию (и будет null) - в конце концов, WCF может быть размещен вне IIS и ASP.NET конвейер.

Если вам нужно и вы хотите использовать HttpContext, вам нужно специально разрешить его и включить. В конфигурации вашего сервера вам необходимо:

<system.serviceModel>        
    <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” />    
</system.serviceModel>

и ваш класс обслуживания также должен быть украшен:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class YourServiceImplementation : IYourService
......

Выезд

для очень широкого охвата всех деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...