使用 ASP.NET 模拟读取远程文件

2024-02-27

我想阅读远程服务器上存储的 PDF。我已获得具有读取访问权限的用户名/密码。

我正在使用此 url 中给出的 ASP.NET 模拟https://support.microsoft.com/kb/306158 https://support.microsoft.com/kb/306158

我将所有内容记录到日志文件中只是为了帮助调试。

 StreamWriter sw = new StreamWriter(Server.MapPath("~/log/logFile.txt"), true);
 sw.WriteLine("Just before Impersonation");

 if(impersonateValidUser("username", "domain", "password"))
 {
    try
     {
          byte[] bytes = File.ReadAllBytes(documentName);
          sw.WriteLine("Bytes read!!");
          undoImpersonation();
     }
    catch(Exception ex)
    {
       sw.WriteLine(ex.Message + "\n" + ex.StackTrace);
       return;
 }
 else
 {
    sw.WriteLine("Impersonation Failed");
            return;
 }

在我的日志文件中,我只看到“就在模拟之前”。 try 和 catch 块的消息都不会写入日志文件。令人惊讶的是,我没有看到模拟失败的消息。

只是想知道是否有人以前有过这种行为的经历?访问远程计算机上的文件是否有任何额外要求?我知道远程机器确实有 advapi32.dll 和 kernel32.dll


我们在使用 MSDN 示例时也遇到了问题,如果我没记错的话,这与句柄过早关闭有关。

我们最终用以下方式重写了它,这对我们来说非常有效:

    private void DoLogin()
    {
        var token = LogonAsUser(userName, domain, password);
        if (!IntPtr.Equals(token, IntPtr.Zero))
        {
            WindowsImpersonationContext impersonatedUser = null;
            try
            {
                var newIdentity = new WindowsIdentity(token);

                impersonatedUser = newIdentity.Impersonate();

                // Do impersonated work here
            }
            finally
            {
                if (impersonatedUser != null)
                {
                    impersonatedUser.Undo();
                }
                LogonAsUserEnd(token);
            }
        }
    }

    private IntPtr LogonAsUser(String userName, String domain, String password)
    {
        IntPtr token = IntPtr.Zero;

        if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
        {
            return token;
        }
        else
        {
            return IntPtr.Zero;
        }
    }

    private void LogonAsUserEnd(IntPtr token) {
        if (!IntPtr.Equals(token, IntPtr.Zero))
        {
            CloseHandle(token);
        }

    }

另一边注:我们将 LogonUserA 定义为返回 bool,而不是 int,这也可能是您遇到的问题的一部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ASP.NET 模拟读取远程文件 的相关文章

  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • HttpContext.GetGlobalResourceObject 始终返回 null

    我在 App GlobalResources 文件夹中创建了两个文件 SiteResources en US resx SiteResources sp SP resx 两者都包含 SiteTitleSeparator 的值 这是我想要做的
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 如何从 sfUser 获取 id?

    我正在使用 symfony 1 4 我使用 sfDoctrineGuardPlugin 作为身份验证工具 我想捕获用户的 ID 以便将其存储在我的表中 经过一番小研究 我想我必须使用这个表达方式 getUser gt getGuardUse
  • 如何检测我是否处于“控制台”模式

    我正在编写一个从浏览器运行的应用程序 然而 一些模型函数也是从 Yii2 控制台调用的 因此 我在尝试访问 GUI 中设置的变量时遇到错误 是否可以知道我处于哪种模式 是否自动设置了一些环境变量 或者我应该在控制台应用程序中设置一些会话变量
  • 如何使用 MVC5 和实体框架使用自定义属性更新 IdentityUser

    我正在使用内置的身份框架进行用户管理 并且想向 AspNetUsers 表添加一些自定义项 到目前为止 我遇到的每个问题的解决方案都会导致另一个问题 如果我对用户模型进行更改 例如 通过在 AspNetUsers 表中添加邮政编码属性和匹配
  • 加载密钥“(stdin)”时出错:格式无效 Gitlab CI

    这是我关于 gitlab ci 的 ssh 的 yaml 文件的一部分 eval ssh agent s echo SSH PRIVATE KEY tr d r ssh add gt dev null mkdir p ssh chmod 7
  • 使用 Python 将 XML 文档插入现有 XML

    给定这些 XML 文档 文件1
  • ASP.NET MVC 4.0 控制器和 MEF,如何将这两者结合在一起?

    我正在尝试使用 MEF 创建 ASP NET MVC 模块 虽然到目前为止我在不使用 MVC 的情况下使用 MEF 没有任何问题 但在导出控制器时我遇到了一些困难 我用这种方法作为例子http kennytordeur blogspot d
  • 如何快速识别 Snakemake 中的规则是否需要输入函数

    我正在关注其文档页面上的 Snakemake 教程 并且确实陷入了输入函数的概念https snakemake readthedocs io en stable tutorial advanced html step 3 input fun
  • 未定义符号:_ZdlPvm

    我在用阿波罗咖啡 https github com Russell91 apollocaffe and 重新检查 https github com Russell91 ReInspect Apollocaffe在 c 库中并且Reinspe
  • Ruby:反转哈希以保留非唯一值

    我有一个看起来像这样的哈希 a gt 1 2 3 b gt 4 5 6 c gt 3 4 5 d gt 7 2 3 我想要做的是使用包含它的所有键的数组对所有现有值进行哈希 例如把上面的变成这样 1 gt a 2 gt a d 3 gt a
  • 您可以从 iPhone 应用程序下载 PDF 格式的内容吗

    是否可以将 iPhone 应用程序中的特定屏幕下载为 PDF 格式 我检查了 iphone 开发者门户和很多其他地方 但找不到答案 我想做的就是单击一个按钮 然后将该屏幕下载为 pdf 并将其存储在某个位置 这可能吗 如果是这样 您会将其存
  • 您对 iAd 和 adSense 有何建议 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑在我的应用程序中添加一个添加项 在 iAd 和 adSense 之间 您会向我推荐哪种广告计划
  • 使用未记录的“Application.Trim”并了解 VBA 智能感知建议

    当我用谷歌搜索时Trim 我发现它是一个Excel函数 也是一个VBA函数 在这两种情况下的 VBA 中 它只能与一个单元格一起使用 并且需要对多个单元格的范围进行循环 但是 我发现一些网页说明了使用Application Trim在没有循
  • 如何从java代码运行gradle任务?

    我需要从 java 方法将 gradle eclipse 任务运行到外部 gradle 项目 是否可以使用 Gradle Tooling API 来完成此操作 The 摇篮论坛 https discuss gradle org t exec
  • 如何同时使用 Mercurial 和 svn

    工作中的 SVN 存储库只能在内部访问 至少对于作为承包商的我来说 不工作的时候 我想使用HG 然后第二天与SVN同步 是否建议同时使用两者 有什么问题应该注意吗 The 使用 Subversion https www mercurial
  • 找不到记录器的处理程序

    我是Python新手 我正在尝试登录 python 我遇到了找不到记录器的处理程序尝试通过记录器实例打印一些警告时出错 下面是我尝试过的代码 import logging logger logging getLogger logger lo
  • 获取 UICollectionView 中 Scroll 的总高度?

    我有一个UICollectionView我想在加载内容时调整大小 高度 这个想法是高度应该扩大 以便所有 UICollectionView 单元格都可见 我想知道是否可以获得 内容 大小或滚动高度 Thanks CGFloat height
  • Android Gradle 1.1 - 添加对另一个项目测试的测试依赖项

    我有2个模块 A and B A是一个独立的模块 它的测试本身运行得很好 B是一个依赖模块 它的测试需要某个文件A的测试文件夹 一个测试文件位于B延伸一英寸A 以下是我认为的相关部分B s build gradle android sour
  • 抽象类的析构函数应该是纯虚拟的吗?

    我认为单独虚拟通常就足够了 除了强制派生类实现自己的析构函数之外 是否还有另一个原因使其成为纯虚拟的 我的意思是 如果你在类的构造函数中分配了一些东西 你应该实现你自己的析构函数 无论你的类是否是派生的 正如我已经知道的那样 这不算是答案
  • 如何导出架构并将其导入到 PL\SQL Developer 中的另一个架构

    我正在使用 AllroundAutomations 的 PL SQL Developer 我的任务是将名为 EN 的模式导入到另一个名为 E9 的模式 现在不存在 我设法使用以下方法转储了一个方案Tools gt Export User O
  • 使用 ASP.NET 模拟读取远程文件

    我想阅读远程服务器上存储的 PDF 我已获得具有读取访问权限的用户名 密码 我正在使用此 url 中给出的 ASP NET 模拟https support microsoft com kb 306158 https support micr