SharePoint 连接仅在 运行 Fiddler 时有效?
SharePoint Connection Only Works When Running Fiddler?
我正在尝试了解在我的 Unity 应用程序中使用 C# 连接到 SharePoint Online(而不是本地 SharePoint)的基础知识。下面是我用作起点的代码(更多 handling/security 稍后涉及)。令人兴奋的是,如果我有 Fiddler 运行(一个 web-activity snooper 工具)或者如果我在 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- 但它似乎没有提供我的答案。
Unity 本身由于代理问题而失败。使用 Fiddler 运行,它会覆盖代理并通过自身重新路由连接。 Unity 可以毫无问题地访问 Fiddler 覆盖的代理,然后 fiddler 使用 Unity 无法执行的 AutoProxy (PAC) 脚本。这完成了我的 SharePoint 访问的连接。由于 SharePoint Online 使用与我们内部本地 SharePoint 网站不同的网址,因此代理对这些请求的行为不同,因此成功率也不同 with/without Fiddler。
注意:不知道为什么当 Unity 编译代码时它不起作用,因为人们可能希望编译后的代码不再受到 Unity 限制的阻碍,但显然 Unity 将失败融入其中,而 Visual Studio如果在 Unity 之外编译似乎工作正常。
我正在尝试了解在我的 Unity 应用程序中使用 C# 连接到 SharePoint Online(而不是本地 SharePoint)的基础知识。下面是我用作起点的代码(更多 handling/security 稍后涉及)。令人兴奋的是,如果我有 Fiddler 运行(一个 web-activity snooper 工具)或者如果我在 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- 但它似乎没有提供我的答案。
Unity 本身由于代理问题而失败。使用 Fiddler 运行,它会覆盖代理并通过自身重新路由连接。 Unity 可以毫无问题地访问 Fiddler 覆盖的代理,然后 fiddler 使用 Unity 无法执行的 AutoProxy (PAC) 脚本。这完成了我的 SharePoint 访问的连接。由于 SharePoint Online 使用与我们内部本地 SharePoint 网站不同的网址,因此代理对这些请求的行为不同,因此成功率也不同 with/without Fiddler。
注意:不知道为什么当 Unity 编译代码时它不起作用,因为人们可能希望编译后的代码不再受到 Unity 限制的阻碍,但显然 Unity 将失败融入其中,而 Visual Studio如果在 Unity 之外编译似乎工作正常。