ПОМОГИТЕ! WebClient.UploadFile () генерирует исключение при загрузке файлов в sharepoint - PullRequest
0 голосов
/ 19 мая 2010

В моем приложении я загружаю файлы в sharepoint 2007. Я использую

using (WebClient webClient = new WebClient())
{
 webClient.Credentials = new NetworkCredential(userName, password);
 webClient.Headers.Add("Content-Type", "application/x-vermeer-urlencoded");
 webClient.Headers.Add("X-Vermeer-Content-Type", "application/x-vermeer-urlencoded");
 String result = Encoding.UTF8.GetString(webClient.UploadData(webUrl + "/_vti_bin/_vti_aut/author.dll","POST", data.ToArray()));
}

код выполняется успешно .. но для некоторых файлов выдается исключение

Базовое соединение было закрыто : Соединение было неожиданно закрыто.в System.Net.WebClient.UploadDataInternal (адрес Uri, метод String, данные Byte [], WebRequest & request) в System.Net.WebClient.UploadData (адрес Uri, метод String, данные Byte [])
в System.Net.WebClient.UploadData (String address, String method, Byte [] data)

Любые идеи, что я сделал неправильно?

Я использую VS-2008 2.0

1 Ответ

1 голос
/ 19 мая 2010

Вот моя функция, которую я использую для одновременной загрузки документа с метаданными:

public static bool Upload(string webUrl, string documentName, byte[] bytes, Dictionary<string, object> metaInfo, out string result)
{
    string putOption = "overwrite,createdir,migrationsemantics";  // see http://msdn2.microsoft.com/en-us/library/ms455325.aspx 
    string comment = null;
    bool keepCheckedOut = false; 
    string method = "method=put+document%3a12.0.4518.1016&service_name=%2f&document=[document_name={0};meta_info=[{1}]]&put_option={2}&comment={3}&keep_checked_out={4}\n"; 
    method = String.Format(method, documentName, EncodeMetaInfo(metaInfo), putOption, HttpUtility.UrlEncode(comment), keepCheckedOut.ToString().ToLower()); 
    List<byte> data = new List<byte>();
    data.AddRange(Encoding.UTF8.GetBytes(method));
    data.AddRange(bytes); 
    try 
    { 
        using (WebClient webClient = new WebClient()) 
        { 
            webClient.Credentials = CredentialCache.DefaultCredentials; 
            webClient.Headers.Add("Content-Type", "application/x-vermeer-urlencoded");
            webClient.Headers.Add("X-Vermeer-Content-Type", "application/x-vermeer-urlencoded");
            result = Encoding.UTF8.GetString(webClient.UploadData(webUrl + "/_vti_bin/_vti_aut/author.dll", "POST", data.ToArray()));
            if (result.IndexOf("\n<p>message=successfully") < 0)   
                throw new Exception(result);
        } 
    }
    catch (Exception ex)
    { 
        result = ex.Message; 
        return false; 
    }

    return true;
}

Это где-то из Google, но, увы, я непослушный кодер и не вставил ссылку в мои комментарии К сожалению ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...