簡體   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