RunWithElevatedPrivileges, кажется, скрывает мою регистрацию - PullRequest
1 голос
/ 26 апреля 2011

Привет всем, я работаю в классе на нашем сервере IIS 7 со всеми установленными Sharepoint Yimmer Yammer.У меня есть веб-сервис, который я создал с помощью пошагового руководства на сайте MSDN.

Я обнаружил, что мне нужно использовать вызов ElevatedPrivilleges, чтобы заставить работать мои классы LINQ.

Как только я это сделал, похоже, что мой регистратор на основе NLog НЕ смогнайдите файл web.nlog, который я поместил в тот же каталог, что и файл web.config, о котором говорится в документации NLog.

Любые операторы журнала вне делегата здесь работают нормально, все внутри никогда не выходит вфайл журнала.

Что дает, что на самом деле происходит в этом делегате?

using System;
using System.Web.Services;
using Notification.DAL;
using SharePointConnector;
using NLog;
using Microsoft.SharePoint;

namespace NotificationReceiverService
{

    [WebService(Namespace = "http://midwestiso.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]

    public class Service : System.Web.Services.WebService
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();
        private static readonly String MACHINE_NAME = Environment.MachineName.ToUpper();

        public Service()
        {
            //Uncomment the following line if using designed components 
            //InitializeComponent(); 
        }

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World, You've contacted the Notifications Receiver Service. " +
                "Please refer to the WSDL for the other available methods";
        }

        [WebMethod]
        public string EchoMessage(string MESSAGE_TEMPLATE_NAME, string MESSAGE_SUBJECT, string MESSAGE_TEXT_SUMMARY,
                                    string MESSAGE_TEXT_DETAIL, string MESSAGE_TEXT_CON_OPS)
        {
            return String.Format("You called EchoMessage and told me {0}, {1}, {2}, {3}, {4}",
                MESSAGE_TEMPLATE_NAME, MESSAGE_SUBJECT, MESSAGE_TEXT_SUMMARY, MESSAGE_TEXT_DETAIL, MESSAGE_TEXT_CON_OPS);
        }

        [WebMethod]
        public string SendMessage(string MESSAGE_TEMPLATE_NAME, string MESSAGE_SUBJECT, string MESSAGE_TEXT_SUMMARY,
                                    string MESSAGE_TEXT_DETAIL, string MESSAGE_TEXT_CON_OPS)
        {
            logger.Info("------" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + " starting on " + MACHINE_NAME + "------");
            try
            {
                //SPSecurity.RunWithElevatedPrivileges(delegate
              //  {
                    int? newNotificationId = 0;
                    using (var db = new MISO_IR_IntegrationDataContext())
                    {
                        logger.Error("Message Received is: {0} - {1} - {2} - {3} - {4} - {5}",
                        DateTime.UtcNow.AddHours(-5), MESSAGE_TEMPLATE_NAME.Trim(),
                            MESSAGE_SUBJECT.Trim(), MESSAGE_TEXT_SUMMARY.Trim(),
                            MESSAGE_TEXT_DETAIL.Trim(), MESSAGE_TEXT_CON_OPS.Trim());

                        int dbProcReturnCode = db.InsertReceivedNotification(DateTime.UtcNow.AddHours(-5),
                            MESSAGE_TEMPLATE_NAME.Trim(), MESSAGE_SUBJECT.Trim(), MESSAGE_TEXT_SUMMARY.Trim(),
                            MESSAGE_TEXT_DETAIL.Trim(), MESSAGE_TEXT_CON_OPS.Trim(), ref newNotificationId);

                        if (dbProcReturnCode == 0)
                        {
                            logger.Info("Notification saved to DB with ID: {0}", newNotificationId);
                            logger.Debug("Getting read to call CreatePublishingPagefromNotification");
                         //   PagePublisher.CreatePublishingPagefromNotification((int)newNotificationId);
                            logger.Debug("Complete calling CreatePublishingPagefromNotification without exception");
                        }
                        else
                        {
                            throw new Exception("Unable to find mapping for this MESSAGE_TEMPLATE, saved the message to the notification table with ERRORNOMAPPING code, aborting further processing");
                        }
                    }
              //  });
            }
            catch (Exception ex)
            {
                logger.ErrorException(ex.Message, ex);
                return "ERRORPOOP";
            }
            finally
            {
                logger.Info("------" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + " COMPLETED ------");
            }
            return "OK";
        }
    }
}

1 Ответ

0 голосов
/ 27 апреля 2011

Этот делегат с повышенными привилегиями запускает код внутри себя как учетную запись веб-приложения (т. Е. Код больше не выдает себя за пользователя, выполняющего код).

Узнайте, под какой учетной записью работает веб-приложение, а затем выясните, почему сообщения журнала изменяются вместе с пользователем.

...