Реклама:

_ctx = context;

DiagnosticsHelper.LogContex 1 Informât ion( "BeginProcessRequest", context.);

DataService proxy = new DataServiceO; return proxy.BeginGetData(cb. oroxy):

}

public void EndProcessRequesttlAsyncResult result) <

DiagnosticsHeiper. LogContexlInformationf, "EndProcessReqiiest", _ctx);

OataService proxy = (DataService)result•AsyncState; Data d = proxy.EndGetData(result):

public bool IsReiisable { get { return false: } )

}

Обращение к LogContext Information выведет в окне отладки информацию о текущем контексте защиты, а также о контексте и текущем принципале потока. (Более подробную информацию о получении доступа к этим данным вы найдете в разделе «Защита и получение доступа к внешним ресурсам».) В блоке End Process Request контекст зашиты возвращается к идентификатору процесса.

Context Information for: BeginProcessRequcst Security Context: DOMAIN\ВОВ

Thread.CurruntPf incipal: DOMAIN\806 Context.User: DOMAIN\B0B

Context Information for: EndProcessHequest

Security Context: NT AdTH0RITY\NETWORK SERVICE

Thread. Cur rentprincipal: "Omain\bob Context.User: D0MAIN\B0B

To же происходит при записи в асинхронную страницу с помощью метода Add()n-PreRenderAsync.

При наличии маркера рлицетворения в асинхронном коде можно использовать три варианта действий.

■ В случае использования клиентского олицетворения можно перехватить Windows-Identity из Thread .Current Principal или Сои/(;.г/.'/«т(вам следует быть осторожным, поскольку HttpConte.it. Current также не действует и методах Endxxx) и выполнить олицетворение вручную.

■ Если вас интересуют только асинхронные страницы, и рекомендую использовать Asym Page.Task. В таком случае помимо предоставления более четкой программной модели (и более простой, если па одной странице у вас выполняется множество асинхронных операций) будет распространяться маркер олицетворения, и вы получите действительный Context. Рассмотрим пример.

Асинхронная страница

<Ш Page Language="C«" Async="true" %>

<!D0CTYPE html PUBLIC '-//W3C//DTD XHTHL 1.1//EN' "htt p: //www. w3. о rg/TR/xhtm 111/DTD/xhtml 11. <J t d" >

<scnpi runat="server">

OataService proxy;

protected void Page_Load(ooject sender, EvontArgs e) {

DiagnosticsHelper.LogContextInformation "Page Load". Context):

PageAsyncTask 1 = new PageAsyncTask(Begin. End. null, null); RegisterAsyncTask(t);

}

IAsyncResult Begin(object sender. EventArgs e AsyncCallback cb, object extraData)

{

DiagnosticsHelper.LogContextlnformation "Begin", Context);

proxy = new DataService();

return proxy.BeginGetData{cb, extraData};

}

void EnddAsyncResult result) {

DiagnosticsHelper. LogContextInforaiation("End". Context); Data d = proxy.EndGetData(result);

}

</scnpt>

<hrm1> ... </html>

В атом случае выходные данные отладки выглядят иначе, а маркер олицетворения доступен на каждой стадии обработки страницы.

Context Information for: Page.Load Security Context: D0MAIN\B0B Thread.Cur rent Principal: D0MAIN\B06 Con text.User: D0HAIN\B0B


⇐ Предыдущая страница| |Следующая страница ⇒