2011-07-22 94 views
6

場景:我在連接到服務器的客戶端上運行代碼,並使用Web服務檢索有關SharePoint列表的數據。我正在使用Visual Studio 2010「服務參考」爲我的SP站點獲取Web服務,並從列表中獲取我的數據。有用。現在我該如何編寫代碼,以便當我想從測試轉移到生產時,我的Web服務調用仍然可以工作?請注意,Web服務是SharePoint Web服務,我沒有寫它。我只使用它。我認爲是可能的嗎?我確實有能力確保這兩個環境中的網站完全相同(URLS除外)(例如備份SP網站並投入生產)。感謝您的任何建議。動態設置網絡服務的URL

摘要:

基本上我正在尋找從測試到生產,而無需重新編譯我的代碼消耗SP的Web服務的最佳途徑。另外,作爲一個便箋,如果有人知道測試/生產共享點站點必須是多麼相似,[爲了讓Web服務在沒有任何東西的情況下工作,除了URL被更改] ..這將是有用的信息。

解決方案

的項目配置文件可以用來指定Web服務的位置。 VS項目中的.svcdatamap和其他文件僅供設計時使用,實際用於連接到SharePoint Web服務的URL作爲參數傳遞給System.Data.Services.Client.DataServiceContext對象。這隻與切線相關,但要創建您自己的WCF Web服務,請參閱此link。順便說一句,Web服務無需重新編譯即可在SharePoint列表具有相同列表名稱的任何位置工作,並且您查詢的列具有相同的名稱。

+0

什麼類型的客戶端應用程序是什麼?一個Windows /控制檯應用程序或Web應用程序?我假設客戶端運行在SharePoint環境之外,對嗎? –

+0

@Vassili - 是的,客戶端運行在SharePoint環境之外並通過Web服務連接到SharePoint。上下文是它是一個MSFT Office解決方案 - 例如代碼與Word文檔一起運行。 – KyleM

回答

14

據我所知,Visual Studio工具Office項目允許你在你的項目中的app.config文件。我期望Visual Studio創建了app.config文件並添加了與Web服務引用相關的必要配置設置。在任何情況下,您都需要在某處存儲正確的Web服務url - app.config,註冊表或甚至數據庫。

如果您無法將web服務端點地址信息存儲在app.config文件中,則可以手動配置代理。

  1. 如果是添加在Visual Studio中的傳統「Web引用」,那麼所有你需要做的是設置代理對象的URL屬性值調用任何Web服務方法之前的.asmx參考。例如:

    MyASMXWebService proxy = new MyASMXWebService(); 
    proxy.Url = "web service url"; 
    proxy.HelloWorld(); 
    
  2. 如果它是一個.SVC WCF服務引用,然後事情就變得有點複雜。您需要以編程方式創建Web服務端點。例如:

    BasicHttpBinding binding = new BasicHttpBinding(); 
    EndpointAddress endpoint = new EndpointAddress("web service url"); 
    
    ChannelFactory<IMyWCFWebService> factory = new ChannelFactory<IMyWCFWebService>(binding, endpoint); 
    IMyWCFWebService proxy = factory.CreateChannel(); 
    
    proxy.DoWork(); 
    
+1

#2就是這種情況 - 我是使用VS 2010服務參考,而不是傳統的Web參考。考慮到你給我的信息,我認爲爲了避免對URL進行硬編碼和重新編譯,我需要一個設置文件來存儲我的EndpointAddress URL。 – KyleM

+1

是的,只要您在代碼中正確配置了綁定和端點屬性的其餘部分,就可以只存儲Web服務url。 –

+0

據我所知,編譯到程序集中的Service References文件夾中唯一的文件是Reference.cs。任何其他自動生成的文件(包括.svcmap文件)僅適用於Visual Studio設計時使用。如果您可以在開發環境中進行Web服務調用,則Web服務代理會從配置文件加載端點信息,因此您的項目中必須有這些信息中的一個。 –

0

你必須編輯URL在項目的web.config

+0

咦?沒有web.config。客戶端不在SharePoint環境中運行。在我的VS項目中,我發現一個URL的唯一配置文件在其擴展名中有「.map」,並且是在VS 2010中添加了「服務參考」時創建的。 – KyleM

1

由於的SharePoint服務(SVC)不提供代理,選項2將無法正常工作。對這兩個位置的引用必須包含在您的應用程序中,然後使用parm來區分生產和測試。我相信2013年可能會糾正這個錯誤。

+0

其實在接受的答案中的選項#2絕對有效,因爲我測試了它。我不再是SharePoint,C#或ASP.NET開發人員,所以我不再使用Visual Studio,但是在發佈時他接受了@Vassili Altynikov的建議,他所說的確實起作用。 – KyleM

0

簡單的SharePoint例如:

MyService.ListsSoapClient client = new MyService.ListsSoapClient(); 
client.Endpoint.Address = "site url"+"/_vti_bin/lists.asmx";