我有一个Silverlight应用程序,它将文件上传到Sharepoint站点。我让它在我的盒子里的Sharepoint站点和别人的盒子里的Sharepoint站点上工作,我在那里使用我的Windows帐户登录该站点。但是我无法将文件上传到位于不同域中的Sharepoint站点/使用不同的登录名。
将文件上传到不使用我帐户的网站。我用它来获取凭据并更改端点
CopySoapClient copy = new CopySoapClient();
copy.ClientCredentials.UserName.UserName = obj.UserName;
copy.ClientCredentials.UserName.Password = obj.Password;
copy.Endpoint.Address = new System.ServiceModel.EndpointAddress(newMaster.Url + "/_vti_bin/Copy.asmx");
copy.Endpoint.Contract.Name = "CopyReference.CopySoap";
copy.Endpoint.Binding.Name = "basicHttpBinding";
copy.Endpoint.Contract.ConfigurationName = "CopySoap";
其中obj.UserName也具有DomainName ..例如。域\用户名。
答案 0 :(得分:4)
以下是我过去使用SharePoint Web服务SDK将文档上传到SharePoint文档库的代码片段。
var copyClient = new Copy();
copyClient .Credentials = credentials; // <-- Create Network Credentials
var siteUrl = "http://....";
var libraryName = "MyDocLibrary";
var localFilePath = "...";
var fileName = Path.GetFileName(localFilePath);
var destinationUrl = string.Format("{0}/{1}/{2}", siteUrl, libraryName, fileName);
var fileBytes = File.ReadAllBytes(localFilePath);
var info = new[]{new FieldInformation
{
DisplayName = fileName,
Id = Guid.NewGuid(),
InternalName = fileName,
Type = FieldType.File,
Value = fileName
}};
CopyResult[] results;
copyClient.CopyIntoItems(destinationUrl, new[] { destinationUrl }, info, fileBytes, out results);
仅供参考 - 此Copy
代理是使用旧学校添加网络参考而非较新的添加服务参考生成的。在使用旧的ASMX SharePoint Web服务时,我发现使用旧的学校代理更容易。
如果您需要动态更改端点网址,则可以在调用CopyIntoItems()
方法之前使用以下内容。
var copyServiceUrl = string.Concat(siteUrl, "/_vti_bin/Copy.asmx");
copyClient.Url = copyServiceUrl;
答案 1 :(得分:0)
我实际上以不同的方式工作。当我使用WebBrowser控件导航到我想上传的sharepoint文档库/文件夹位置时,我发现该网站未经过真正的身份验证。由于我使用Silverlight,我无法使用它,
copy.ClientCredentials.Windows.ClientCredential.Domain.
我可以在ASP.Net应用程序中使用它来上传文件。
因此,我手动提示用户在WebBrowser控件中输入凭据。现在一切正常。问题是我无法通过域传递凭据,或者无法从Silverlight指定域。
PS:我有客户端访问策略和跨域。所以它与此无关。 (据我所知)。
如果没有这种解决方法,我可以获得解决方案。非常感谢。
再次感谢Wallace的兴趣。