SharePoint發(fā)行版本有SharePoint2003、SharePoint2007、Sharepoint 2010、SharePoint2013和SharePoint2016。SharePoint提供了功能強(qiáng)大的團(tuán)隊(duì)協(xié)作環(huán)境,使得組織能夠在整個(gè)組織內(nèi)部實(shí)現(xiàn)整合、組織、查找和提供 SharePoint站點(diǎn)。 內(nèi)容比較簡單,主要記錄自己使用SharePoint 2013WCF服務(wù)遇到的小問題和小經(jīng)驗(yàn),分享給大家,希望能夠給需要的人有所幫助。好吧,進(jìn)入正題! 第一部分 SharePoint 2013調(diào)用自帶WCF服務(wù)1、在創(chuàng)建好的測試項(xiàng)目中(控制臺程序),在引用上右鍵添加服務(wù)引用,如下圖: 2、填寫WCF的服務(wù)地址和命名空間,完畢后點(diǎn)擊轉(zhuǎn)到,如果服務(wù)沒有開匿名,可能需要輸入用戶名和密碼,如下圖: 3、點(diǎn)擊轉(zhuǎn)到并輸入用戶名密碼,稍等片刻,即可找到WCF服務(wù),然后點(diǎn)擊確定即可將服務(wù)添加到引用,如下圖: 4、添加調(diào)用WCF服務(wù)的代碼,這里代碼很簡單,就是獲取List中的數(shù)據(jù): ![]() public static void GetListDate(){ //創(chuàng)建WCF服務(wù) Uri url = new Uri("http://serverurl/_vti_bin/ListData.svc"); ListDataService.開發(fā)人員網(wǎng)站DataContext datacontent = new ListDataService.開發(fā)人員網(wǎng)站DataContext(url); //給WCF服務(wù)授權(quán) NetworkCredential nc = new NetworkCredential("username", "password", "domain"); datacontent.Credentials = nc; //獲取數(shù)據(jù),AppInstallLogs為列表 var itemcoll = datacontent.AppInstallLogs; foreach (var item in itemcoll) { Console.WriteLine("ID:{0} - 標(biāo)題:{1}", item.Id, item.標(biāo)題); }} ![]() 5、測試結(jié)果,如下圖: 以上就是SharePoint 2013 WCF的簡單調(diào)用,本文只是一個(gè)調(diào)用的例子,沒有更加深入的講解。 第二部分 SharePoint 2013調(diào)用自定義WCF服務(wù)下面,介紹自定義WCF的簡單調(diào)用,其實(shí)代碼都比較簡單,只是授權(quán)的時(shí)候,有點(diǎn)糾結(jié),自己搞了一下午,才發(fā)現(xiàn)問題,現(xiàn)在趁著有空,拿出來跟大家分享。添加引用的地方,和引用SharePoint自帶的WCF服務(wù)是一樣的步驟,這里就不多說了,直接調(diào)用了。 6、如下圖,可以看到我們的服務(wù),還有服務(wù)里面包含的操作 7、調(diào)用WCF的方法,微軟上的說明是先設(shè)置代理,然后設(shè)置為NTLM,再調(diào)用WCF服務(wù),給WCF服務(wù)授權(quán),即可調(diào)用SharePoint自定義的WCF; ![]() public static void GetWebTitle(){ //設(shè)置代理 BasicHttpBinding myBinding = new BasicHttpBinding(); myBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm; EndpointAddress ea = new EndpointAddress(http://serverurl/_vti_bin/GetWebTitle/GetWebTitle.svc); //WCF服務(wù)的方法調(diào)用 GetWebTitleService.GetWebTitleClient up = new GetWebTitleService.GetWebTitleClient(myBinding, ea); up.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; //和注釋的兩種授權(quán)方式,都可以 NetworkCredential nc = new NetworkCredential("username", "password", "domain"); up.ClientCredentials.Windows.ClientCredential = nc; //up.ClientCredentials.Windows.ClientCredential.UserName = "domain\\username "; //up.ClientCredentials.Windows.ClientCredential.Password = "password"; Console.WriteLine("WCF調(diào)用結(jié)果:" + up.GetSPWebTitle("http://weburl", ""));} ![]() 8、執(zhí)行程序,查看調(diào)用結(jié)果,調(diào)用成功獲取到了站點(diǎn)的名稱! 特:這個(gè)WCF服務(wù)是上一篇博客中定義的,有興趣查看的請參考附后的鏈接,謝謝! 9、特別想說的是,如果不設(shè)置代理會(huì)報(bào)如下錯(cuò)誤,解決了一下午才發(fā)現(xiàn)問題所在; 畫外音 看到如上圖的401錯(cuò)誤,自己就想到是WCF服務(wù)的認(rèn)證出了問題,因?yàn)橹罢{(diào)用WebService的時(shí)候,都是通過授權(quán)調(diào)用的,很奇怪這個(gè)沒有授權(quán)方式; 后來,經(jīng)過不斷的找資料,發(fā)現(xiàn)了授權(quán)的兩種方式(上面代碼使用的和注釋掉的),但是依然401錯(cuò)誤,后來發(fā)現(xiàn)需要設(shè)置代理,具體原理自己也不十分清楚,如果有非常了解WCF的看到,希望可以給我留言,如果以后我發(fā)現(xiàn)了原理,也會(huì)及時(shí)補(bǔ)充過來! 總 結(jié) 本文只是簡單介紹WCF的調(diào)用過程,內(nèi)容比較簡單,算是對之前遇到問題的一個(gè)簡單總結(jié),也希望能夠給需要使用的人以幫助。 Sharepoint 可以幫助企業(yè)用戶輕松完成日常工作。 |
溫馨提示:喜歡本站的話,請收藏一下本站!