【问题标题】:SharePoint Connection Only Works When Running Fiddler?SharePoint 连接仅在运行 Fiddler 时有效?
【发布时间】:2020-07-22 15:25:09
【问题描述】:

我正在尝试在我的 Unity 应用程序中使用 C# 连接到 SharePoint Online(而不是本地 SharePoint)的基础知识。下面是我用作起点的代码(稍后将涉及更多处理/安全性)。令人兴奋的是,如果我运行 Fiddler(一个网络活动窥探工具)或者如果我在 Unity 之外编译它,那么这段代码就可以工作。如果没有 Fiddler(在 Unity 中),我会收到错误消息:SocketException: No connection could be made because the target machine actively refused it. Fiddler 可能会做些什么来完成这项工作,有没有办法可以在我的代码中复制它?

    public void SharepointLogin()
    {
        //string url = "https://<private_server>/sites/sitename";
        string url = "https://<company>.sharepoint.com/sites/otherSiteName";
        //string folderpath = "/sites/sitename/folder/";
        string folderpath = "/sites/otherSiteName/folder/";
        string filepath = "W:/ServerData.csv";

        using (var ctx = new ClientContext(url))
        {
            ctx.AuthenticationMode = ClientAuthenticationMode.Default;
            SecureString ss = new NetworkCredential("", password).SecurePassword;

            //ctx.Credentials = new System.Net.NetworkCredential(username, password);
            ctx.Credentials = new SharePointOnlineCredentials(usernameWithDomain, ss);
            
            var filename = Path.GetFileName(filepath);
            using (FileStream fs = new FileStream(filepath, FileMode.Open))
            {
                Microsoft.SharePoint.Client.File.SaveBinaryDirect(ctx, folderpath + filename, fs, true);
            }
        }

    }

其他信息:

半相关但可能很有见地,Unity 在连接到“本地”SharePoint 网站时似乎无法使用CredentialCache.DefaultNetworkCredentials(实际上似乎根本不包括它),这迫使我重新创建它们System.Net.NetworkCredentials 代替。 (请参阅确实适用于其他站点的注释行)。如果我在 Unity 之外构建相同的代码,它也可以正常工作,很明显 Unity 出于某种原因正在剥离它。 Unity 的代理似乎也存在一般问题,但由于我可以使用本地服务器,我希望还有一种方法可以访问 SharePoint Online 服务器——尤其是因为 Fiddler 以某种方式做到了工作,因此 Unity 不能像使用 DefaultCredentials 那样简单地剥离凭据。

SharePoint Online 特别需要一个 SharePointOnlineCredentials 对象,因此我没有获得与本地部署相同的解决方法。 Fiddler 没有修复本地连接,但是,在使用 DefaultNetworkCredentials 时,就像在使用 SharePointOnlineCredentials 时一样,所以显然这是一种不同的故障机制。我也通读了https://www.telerik.com/blogs/help!-running-fiddler-fixes-my-app-,但它似乎没有提供我的答案。

【问题讨论】:

    标签: c# unity3d proxy sharepoint-online fiddler


    【解决方案1】:

    Unity 本身因代理问题而失败。在 Fiddler 运行时,它会覆盖代理并通过自身重新路由连接。 Unity 可以毫无问题地访问 Fiddler 覆盖的代理,然后 fiddler 使用 Unity 无法执行的 AutoProxy (PAC) 脚本。这完成了我的 SharePoint 访问的连接。由于 SharePoint Online 使用的网址与我们的内部本地 SharePoint 网站不同,因此代理对这些请求的行为不同,因此在使用/不使用 Fiddler 的情况下成功率有所不同。

    注意:不知道为什么在 Unity 编译代码时它不起作用,因为人们可能期望编译的代码不再受到 Unity 限制的阻碍,但显然 Unity 将失败融入其中,而 Visual Studio 似乎可以正常工作在 Unity 外部编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      相关资源
      最近更新 更多