繁体   English   中英

SharePoint 连接仅在运行 Fiddler 时有效?

[英]SharePoint Connection Only Works When Running Fiddler?

我正在尝试在我的 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);
            }
        }

    }

附加信息:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM