2011-05-20 94 views
1

我是WCF服務的新手。我創建了一個簡單的asp.net Web應用程序,並調用SharePoint Admin Web服務來創建一個站點。以下是代碼。在WCF服務中調用Sharepoint Web服務

protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     CreateSiteClass objCreateSiteClass = new CreateSiteClass(); 
     objCreateSiteClass.CreateSite(txtSiteName.Text); 
    } 

[WebServiceBindingAttribute(Name = "AdminSoap", Namespace = "http://schemas.microsoft.com/sharepoint/soap/")] 

public class CreateSiteClass : System.Web.Services.Protocols.SoapHttpClientProtocol 
{ 
    public void CreateSite(string str) 
    { 
     try 
     { 
      AdminService.Admin admService = new AdminService.Admin(); 
      //admService.Credentials = System.Net.CredentialCache.DefaultCredentials; 
      admService.Credentials = new System.Net.NetworkCredential("ashish.rautela", "[email protected]", "IRISSOFTWARE"); 
      admService.CreateSite(str, "Title", "Description", 1033, "STS#0", "IRISSOFTWARE\\ashish.rautela", "Ashish Rautela", "[email protected]", "", ""); 
     } 
     catch (System.Web.Services.Protocols.SoapException ex) 
     { 
      Console.WriteLine(ex.StackTrace); 
     } 
    } 
} 

這成功創建了網站(無論你將在函數參數傳遞)

但我的要求是使用WCF服務這裏面的服務。所以,我創建了一個WCF應用程序,並在實現IService1接口的Service1類中編寫了相同的函數。

WCF服務是成功構建,當我創建一個虛擬目錄後,瀏覽它,它給了我以下路徑: -

http://vm-sp-vishal.irissoftware.com:8888/WCFSiteCreateor/Service1.svc?wsdl

在此之後我創建了一個簡單的asp.net web應用程序,並添加在我的項目中右鍵單擊 - >添加服務參考。然後我寫了下面的代碼在我default.aspx.cs

protected void btnid_Click(object sender, EventArgs e) 
{ 
    TestService(txt.Text); 
} 

protected void TestService(string strUrl) 
{ 
    MyWCFAdminService.Service1Client objMyWCFAdminService = new MyWCFAdminService.Service1Client(); 
    objMyWCFAdminService.SiteCreatorClass(strUrl); 
} 

但是當我運行該應用程序和函數參數傳遞到一個文本框,它給了我一個拒絕訪問錯誤。

我是運行此代碼的SharePoint服務器中的服務器場管理員成員。

任何幫助?

+0

wcf服務在哪個用戶帳戶下運行?它是否具有必要的訪問權限來執行與SharePoint相關的流程?嘗試創建單獨的應用程序池並將所需的身份設置爲該池(考慮到您已在IIS中託管WCF) – Aravind 2011-05-20 10:19:42

+0

它正在使用的用戶帳戶是服務器場管理員組成員。它具有對SharePoint進程的必要訪問權限,因爲它可以成功運行,而無需在WCF內調用相同的代碼片段。我相信我的WCF服務沒有SharePoint上的寫操作權限。 – Ashish 2011-05-20 11:34:28

回答

0

這聽起來像你需要理清你的訪問策略,你將去跨域...

你可能需要在你的WCF服務的根clientaccesspolicy.xmlm文件(或sdharepoint的)

其內容必須是這樣的

<?xml version="1.0" encoding="utf-8" ?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from> 
     <domain uri="*"/> 
     </allow-from> 
     <grant-to> 
     <resource include-subpaths="true" path="/"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 

顯然是一個並不安全;)生病樂T優的數字,有點出入。