System.Net.WebRequest Пользовательские учетные данные - PullRequest
0 голосов
/ 30 марта 2012

Пытаясь следовать этому учебному пособию по MSDN, чтобы получить веб-ответ, но не получите ответ, поэтому мне интересно, могу ли я использовать что-либо еще, кроме учетных данных по умолчанию или сетевых учетных данных для отправки веб-запроса.

Я использую его в задании таймера Sharepoint, установленном с использованием Feature Receiver, вот код,

Класс задания таймера с методом execute

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System.Diagnostics;

namespace EmailJob.FeatureCode
{
    class SharePointWarmupJob : SPJobDefinition
    {
        private const string JOB_NAME = "Email Job";

        public SharePointWarmupJob() : base() { }

        public SharePointWarmupJob(SPWebApplication webApp)
            : base(JOB_NAME, webApp, null, SPJobLockType.ContentDatabase)
        {
            this.Title = JOB_NAME;
        }

        public override void Execute(Guid targetInstanceId)
        {
            Debug.Assert(false);

            if (this.WebApplication.Sites.Count > 0)
                WarmUpSharePointSite(this.WebApplication.Sites[0]);
        }

        private void WarmUpSharePointSite(SPSite siteCollection)
        {
            System.Net.WebRequest request = System.Net.WebRequest.Create(siteCollection.Url);
            request.Credentials = System.Net.CredentialCache.DefaultCredentials;
            request.Method = "GET";

            System.Net.WebResponse response = request.GetResponse();
            response.Close();
        }
    }
}

Класс приемника функций

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using EmailJob.FeatureCode;

namespace EmailJob
{
    class EmailJobFeature : SPFeatureReceiver
    {
        private const string JOB_NAME = "Email Job";

        public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        {
            throw new NotImplementedException();
        }

        public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        {
            throw new NotImplementedException();
        }

        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            SPWebApplication webApp = properties.Feature.Parent as SPWebApplication;
            if (webApp == null)
                throw new NotImplementedException("Error obtaining reference to Web application");

            foreach (SPJobDefinition job in webApp.JobDefinitions)
                if (job.Name == JOB_NAME) job.Delete();

            SharePointWarmupJob warmupJob = new SharePointWarmupJob(webApp);

            SPMinuteSchedule schedule = new SPMinuteSchedule();
            schedule.BeginSecond = 0;
            schedule.EndSecond = 59;
            schedule.Interval = 5;

            warmupJob.Schedule = schedule;

            warmupJob.Update();
        }

        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            SPWebApplication webApp = properties.Feature.Parent as SPWebApplication;
            if (webApp == null)
                throw new NotImplementedException("Error obtaining reference to Web application");

            foreach (SPJobDefinition job in webApp.JobDefinitions)
                if (job.Name == JOB_NAME) job.Delete();

            throw new NotImplementedException();
        }
    }
}

Когда я пытаюсь отладить, он не дает ответа в строке кода

"System.Net.WebResponse response = request.GetResponse();"

Это мой VPC, и я вошел в систему как администратор, я даже закомментировал строку кода учетных данных или попробовал сетевые учетные данные, но, похоже, это просто не работает.

О, да, когда я пытаюсь протестировать код в Консольном приложении, он говорит, что свойства учетных данных равны нулю, кроме encrypt = true

Ура!

1 Ответ

1 голос
/ 30 марта 2012

С msdn , учетные данные имеют тип ICredentials, поэтому вам нужна реализация.

К счастью, они также утверждают, что вы должны использовать объект NetworkCredentials или CredentialCache ;)

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