如何使用WebService复制文件到SharePoint?我正在编写一个winformsc#2.0应用程序,它需要将XML文件放入SharePoint上的文档库中。我想使用WebService而不是使用对象模型(此处没有sharepoint.dll参考)我目前正在使用http://webserver/site/_vti_bin/copy.asmxwebservice。这是一些代码:byte[]xmlByteArray;使用(MemoryStreammemoryStream=newMemoryStream()){xmlDocument.Save(memoryStream);xmlBytes=memoryStream.ToArray();}string[]destinationUrlArray=newstring[]{"http://webserver/site/Doclib/UploadedDocument.xml"};FieldInformationfieldInfo=newFieldInformation();FieldInformation[]fields={fieldInfo};CopyResult[]结果数组;使用(复制copyService=newCopy()){copyService.Credentials=CredentialCache.DefaultCredentials;copyService.Url="http://webserver/site/_vti_bin/copy.asmx";copyService.Timeout=600000;uintdocumentId=copyService.CopyIntoItems("",destinationUrlArray,fields,xmlByteArray,outresultsArray);当这段代码运行时,我在resultsArray输出参数中得到一个结果:DestinationURL:"http://webserver/site/Doclib/UploadedDocument.xml"ErrorCode:UnKnownErrorMessage:"对象引用未设置为对象的实例。“从我的搜索中,我发现了一些可能有帮助的东西。这让我相信我的源URL应该设置为某个东西,但是什么?这源自客户端工作站,没有源URL。任何帮助将不胜感激。谢谢Keith我知道这是一个旧线程,但我一直在寻找解决同一问题的方法。查看SteveCurran在这篇文章中的回答http://social.msdn.microsoft.com/Forums/en-SG/sharepointdevelopment/thread/833e38a8-f13c-490d-8ba7-b889b6b25e38。看起来基本上请求失败是因为无法解析目标url。(对新stackflow用户的限制-不能发布多个链接。请参阅我的评论)PatSharePoint响应普通的旧HTTPPUT这是当前工作的内容:WebRequestrequest=WebRequest.Create("http://webserver/site/Doclib/UploadedDocument.xml");request.Credentials=CredentialCache.DefaultCredentials;request.Method="PUT";字节[]缓冲区=新字节[1024];使用(Streamstream=request.GetRequestStream()){使用(MemoryStreammemoryStream=newMemoryStream()){dataFile.MMRXmlData。保存(内存流);内存流。寻找(0,SeekOrigin。开始);for(inti=memoryStream.Read(buffer,0,buffer.Length);i>0;i=memoryStream.Read(buffer,0,buffer.Length)){stream.Write(buffer,0,i);}}}WebResponse响应=request.GetResponse();响应.关闭();那么...是否有人对SharePoint环境中的“PUT”方法是否比使用内置Web服务更好有任何疑问?有意见吗?现在我不得不说“PUT”方法更好,因为它有效,但我无法让WebService工作。Keith您的代码很好,只需使用目标url而不是空字符串。见下文:byte[]xmlByteArray;使用(MemoryStreammemoryStream=newMemoryStream()){xmlDocument.Save(memoryStream);xmlBytes=memoryStream.ToArray();}stringdestinationUrl=“http://webserver/site/Doclib/UploadedDocument.xml”string[]destinationUrlArray=newstring[]{destinationUrl};FieldInformationfieldInfo=newFieldInformation();FieldInformation[]fields={fieldInfo};CopyResult[]结果数组;使用(复制copyService=newCopy()){copyService.Credentials=CredentialCache.DefaultCredentials;copyService.Url="http://webserver/site/_vti_bin/copy.asmx";copyService.Timeout=600000;uintdocumentId=copyService.CopyIntoItems(destinationUrl,destinationUrlArray,fields,xmlByteresultsArray,out);我在使用默认凭据时收到相同的消息。尝试将它们替换为:copyWebService.Credentials=newNetworkCredential("Administrator","pass","MyDomain");这是我已经写了一段时间的代码(抱歉,我不得不把它们放在一起,但希望你能理解)//使用可以接收帖子的URL创建请求。WebRequestrequest=WebRequest.Create("http://sharepointsite/somefile.txt");//设置请求的方法属性为POST.request.Method="PUT"StreamdataStream;//设置WebRequest的ContentType属性。request.ContentType="multipart/form-data;charset=ISO-8859-1";byte[]byteArray=File.ReadAllBytes(@"c:somefile.txt");//设置WebRequest的ContentLength属性。request.ContentLength=byteArray.Length;//获取请求流。数据流=请求。获取请求流();//将数据写入请求stream.dataStream.Write(byteArray,0,byteArray.Length);//关闭流对象.dataStream.Close();//获取响应.HttpWebResponseresponse=(HttpWebResponse)request.GetResponse();HttpStatusCode统计代码=响应.StatusCode;//获取包含服务器返回内容的流。数据流=响应。获取响应流();//使用StreamReader打开流以便于访问。StreamReaderreader=newStreamReader(dataStream);//读取内容.stringresponseFromServer=reader.ReadToEnd();//清理streams.reader.Close();数据流.关闭();响应.关闭();我不确定它是否能解决您的问题,但是当您引用Web服务时,请不要使用URL的[site]部分,而是:http://[server]/_vti_bin/[webservice]。我不是SP方面的专家,但我很确定Web服务属于主服务器,而不是特定站点。希望能帮到你。我遇到了类似的问题,结果发现客户端配置为使用NTLM安全性,但没有附加NTLM标头。由于我在ASP.NET应用程序的服务器端使用此代码,所以我的情况是启用Windows身份验证并在server.web部分中设置identityimpersonate="true"。如果您的Sharepoint服务器建立在服务器场上,请检查您的“备用访问映射”以查看是否有条目:yourwebserverurlintranetyourwebserverurl如果没有,请添加它。在我的例子中,添加这个之后,复制服务开始工作。这可能是由于农场负载平衡地址解析相关。我不明白,为什么您使用Copy而不是UpdateListItems。也许UpdateListItems会更好?以上就是C#学习教程:如何使用WebService复制文件到SharePoint?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
