1

パフォーマンスの問題により、公開コードをスレッドに追加しました。

私のコードは次のとおりです。

public void functionname()
{
----------------
------------
    try
     {
         HttpontextforMailSending gethttpcontextforpublish2 = new HttpontextforMailSending()
             {
                 HttpContextReference = HttpContext.Current,
                 courseDocument = shortCourseDocument,
                 createdUser = new User(0)
             };

         Thread t2 = new Thread(PublishDocument);
         t2.Start(gethttpcontextforpublish2);
      }
      catch { }
-------------
-----------
}

private void PublishDocument(object input)
{
     HttpontextforMailSending httpcontextformail = (HttpontextforMailSending)input;
     Document course = httpcontextformail.courseDocument;
     User createduser = httpcontextformail.createdUser;

     if (course != null && createduser != null)
     {
         course.Publish(createduser);
         umbraco.library.UpdateDocumentCache(course.Id);
     }
}

public class HttpontextforMailSending
{
    public HttpContext HttpContextReference { get; set; }       
    public Document courseDocument { get; set; }
    public User createdUser { get; set; }
}

しかし、私は得るObject reference not set to an instance of an object" error on "course.Publish(createduser);

Umbraco のバージョンは 4.8.1 です。

このエラーは が原因である可能性がありますcourse.HttpContext。価値がありnullます。

ただしcourse.HttpContext = httpcontextformail.HttpContextReference;、警告を表示するように設定すると

" umbraco.cms.businesslogic.web.document.HttpContext is obsolete. Do not use this. GethttpContext via regular ASP.Net methods instead.

このコードをデバッグするとHttpContexthttpcontextformail.HttpContextReference.

しかし、実行後 course.HttpContext = httpcontextformail.HttpContextReference;course.HttpContextまだ null 値があります。

私を助けてください

ありがとう

4

1 に答える 1

0

Umbraco は Web リクエスト内で使用されることを想定しているため、別のアプリケーションなどで Web リクエストの外部で呼び出された場合、API は機能しません。

Umbraco API を使用して何かを外部で実行したい場合は、API が必要な HttpContext を持つようにUmbraco Base (または類似のもの) を使用する必要があります。

Umbraco Base は、Umbraco コンテキスト内で定義された URL を介してクエリまたはコードを実行できるようにするための REST に似たシステムです。

于 2012-12-20T16:10:42.120 に答える