HttpWebRequest em TimerJob
-
10-12-2019 - |
Pergunta
Eu tenho uma página aspx na pasta Layouts.Um timejob faz uma solicitação httpweb nesta página e a resposta-html é salva como um pdf.O httpwebrequest funciona bem, quando não é chamado em um timerjob (ex.em outra página de layouts), mas quando executo o método GetReponse () no timerjob, recebo um erro 401 (não autorizado).
Com este código funciona em w3wp.exe
request.Method = "GET";
request.UseDefaultCredentials = true;
request.PreAuthenticate = true;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
A única maneira de fazer funcionar em owstimer.exe é com
request.Credentials = new NetworkCredential(user, password, domain);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Mas não queremos armazenar a senha em algum lugar em texto simples.
Como posso fazê-lo funcionar em owstimer.exe sem fornecer as credenciais?
Solução
Isenção de responsabilidade:Embora isso não ignore a necessidade de fornecer um conjunto de credenciais de usuário, pelo menos evitará de alguma forma armazená-las como texto não criptografado.
A ideia geral é utilizar o Serviço de Repositório Seguro para armazenar um conjunto de credenciais que serão utilizadas na solicitação.Você precisa definir um "aplicativo" e acessá-lo por meio de codebehind a partir da instância do trabalho de timer.
Este exemplo do msdn deve fornecer um início rápido na implementação.Na verdade, fiz isso para fornecer a criação de conjuntos de sites a partir de um contexto SPLongOperation.
(observação:Adicionarei mais algumas informações/telas - tenho algum problema de rede agora.Enquanto isso, fique à vontade para pedir mais informações, conforme necessário)