上传大文件100mb+;通过c#Web服务访问Sharepoint 2010

上传大文件100mb+;通过c#Web服务访问Sharepoint 2010,c#,visual-studio-2010,web-services,sharepoint,file-upload,C#,Visual Studio 2010,Web Services,Sharepoint,File Upload,我无法将大型文件上载到Sharepoint 2010。我正在使用Visual Studio 2010和C语言。我从网上找到的内容中尝试了多种方法,但没有任何效果。我已将设置和配置文件更改为允许的最大上载限制,但仍然没有更改。我将copy.asmx用于小文件,它工作正常,当文件太大并引发异常时,我尝试上载DataAsync,但这不起作用。请看下面的代码 非常感谢您的任何/所有帮助 using System; using System.Collections.Generic; using Syste

我无法将大型文件上载到Sharepoint 2010。我正在使用Visual Studio 2010和C语言。我从网上找到的内容中尝试了多种方法,但没有任何效果。我已将设置和配置文件更改为允许的最大上载限制,但仍然没有更改。我将copy.asmx用于小文件,它工作正常,当文件太大并引发异常时,我尝试上载DataAsync,但这不起作用。请看下面的代码

非常感谢您的任何/所有帮助

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace ListsService
{

    public class UploadDocumentcs
    {
        public string UploadResult { get; set; }
        public string Errors { get; set; }
        public UploadDataCompletedEventHandler WebClient_UploadDataCompleted { get; set; }
        public byte[] content { get; set; }

        public void UploadDocumentToSP(string localFile, string remoteFile)
        {
            string result = string.Empty;
            SPCopyService.CopySoapClient client = new SPCopyService.CopySoapClient();

            string sUser = "user";
            string sPwd = "pwd";
            string sDomain = "dmn";
            System.Net.NetworkCredential NC = new System.Net.NetworkCredential(sUser, sPwd, sDomain);

            client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
            client.ClientCredentials.Windows.ClientCredential = NC;

            try
            {
                client.Open();

                string url = "http://SP/TestLibrary/";
                string fileName = localFile.Substring(localFile.LastIndexOf('\\'), (localFile.Length - localFile.LastIndexOf('\\')));
                fileName = fileName.Remove(0, 1);
                string[] destinationUrl = { url + fileName };

                System.IO.FileStream fileStream = new System.IO.FileStream(localFile, System.IO.FileMode.Open);
                byte[] content = new byte[(int)fileStream.Length];
                fileStream.Read(content, 0, (int)fileStream.Length);
                fileStream.Close();

                // Description Information Field
                SPCopyService.FieldInformation descInfo = new SPCopyService.FieldInformation
                                                  {
                                                      DisplayName = "Description",
                                                      Type = SPCopyService.FieldType.File,
                                                      Value = "Test file for upload"
                                                  };

                SPCopyService.FieldInformation[] fileInfoArray = { descInfo };

                SPCopyService.CopyResult[] arrayOfResults;

                 uint result2 = client.CopyIntoItems(fileName, destinationUrl, fileInfoArray, content, out arrayOfResults);                

                // Check for Errors
                 foreach (SPCopyService.CopyResult copyResult in arrayOfResults)
                 {
                     string msg = "====================================" +
                                  "SharePoint Error:" +
                                  "\nUrl: " + copyResult.DestinationUrl +
                                  "\nError Code: " + copyResult.ErrorCode +
                                  "\nMessage: " + copyResult.ErrorMessage +
                                  "====================================";


                     Errors = string.Format("{0};{1}", Errors, msg);
                 }
                 UploadResult = "File uploaded successfully";

            }
            catch (OutOfMemoryException)
            {
                System.Uri uri = new Uri("http://bis-dev-srv2:300/DNATestLibrary/");
                (new System.Net.WebClient()).UploadDataCompleted += new UploadDataCompletedEventHandler(WebClient_UploadDataCompleted);
                (new System.Net.WebClient()).UploadDataAsync(uri, content);

            }

            finally
            {
                if (client.State == System.ServiceModel.CommunicationState.Faulted)
                {
                    client.Abort();
                    UploadResult = "Upload aborted due to error";
                }

                if (client.State != System.ServiceModel.CommunicationState.Closed)
                {
                    client.Close();
                }
            }
        }


        void WcUpload_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
        {

            if (e != null)
            {
                UploadResult = "Upload Unuccessful";
            }
            else
            {
                UploadResult = "Upload Successful";
                //throw new NotImplementedException();
            }
        }
    }
}
肖恩
为了使其正常工作,您必须更改SharePoint配置以增加上载限制和超时。下面的链接显示了使大型文件上传正常工作的必要步骤


谢谢毗瑟奴,我已经这么做了,但是没有用。我找到了另一种使用UploadData和UploadDataAsync的方法,如下所示,这似乎很有效。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
namespace UploadTester
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void btnSelectFile_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            textBox1.Text = openFileDialog1.FileName;
        }

        private void btnUpload_Click(object sender, EventArgs e)
        {
            try
            {
                byte[] content = GetByteArray();
                string filename = Path.GetFileName(openFileDialog1.FileName);

                System.Net.WebClient webClient = new System.Net.WebClient();
                System.Uri uri = new Uri("http://SP/DNATestLibrary/" + filename);
                webClient.Credentials = new NetworkCredential("username", "pwd", "domain");

                webClient.UploadData(uri, "PUT", content);

                MessageBox.Show("Upload Successful");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        byte[] GetByteArray()
        {
            FileStream fileStream = new System.IO.FileStream(openFileDialog1.FileName, System.IO.FileMode.Open);
            byte[] content = new byte[(int)fileStream.Length];
            fileStream.Read(content, 0, (int)fileStream.Length);
            fileStream.Close();

            return content;
        }

        private void btnUploadAsync_Click(object sender, EventArgs e)
        {
            try
            {
                byte[] content = GetByteArray();
                string filename = Path.GetFileName(openFileDialog1.FileName);

                System.Net.WebClient webClient = new System.Net.WebClient();
                System.Uri uri = new Uri("http://SP/DNATestLibrary/" + filename);

                webClient.UploadDataCompleted += new UploadDataCompletedEventHandler(webClient_UploadDataCompleted);
                webClient.Credentials = new NetworkCredential("username", "pwd", "domain");

                webClient.UploadDataAsync(uri, "PUT", content);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        void webClient_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                MessageBox.Show("Upload Successful");
            }
            else
            {
                MessageBox.Show(e.ToString());
            }

        }
    }
}