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?

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top