這可能是一個非常愚蠢的問題,但我一直無法找出解決方案。 我有一個WCF服務託管在使用SiteMinder驗證的網站上。身份驗證依賴於客戶端請求中的cookie。問題是,當我嘗試使用svcutil生成代理類時,操作失敗,因爲當svcutill嘗試獲取元數據時,它顯然不會將SiteMinder cookie添加到其請求中。因此,我想知道是否有一種簡單的方法以編程方式生成WCF服務代理類。在受SiteMinder保護的站點上暴露WCF元數據
1
A
回答
1
如果您有權訪問編譯的服務DLL文件,則可以使用the SvcUtil command line utility爲數據協定生成WSDL和關聯的XSD。這種方法的主要缺點是您需要在schemaLocation屬性值的每個xsd:import元素中添加由SvcUtil生成的XSD文件的名稱。
下面是修改後的xsd:import元素的示例。對於「http://tempuri.org/」命名空間,我添加了schemaLocation屬性值爲「tempuri.org.xsd」以便知道添加服務引用進程知道在與WSDL文件相同的文件夾中查找該文件。如果您的WSDL使用wsdl:import,請添加一個位置屬性而不是schemaLocation屬性。這個related question and answer應該有一個好的開始。
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import namespace="http://tempuri.org/" schemaLocation="tempuri.org.xsd" />
<xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="schemas.microsoft.com.2003.10.Serialization.xsd" />
</xsd:schema>
</wsdl:types>
編輯:
生成使用已編譯服務DLL客戶端代碼需要一個兩個步驟過程。 SvcUtil需要服務WSDL來生成客戶端。它不能直接使用編譯的DLL。
首先使用包含ServiceContract的DLL生成WSDL。如果服務合約DLL也在同一個文件夾中,我認爲你可以使用服務實現文件。
cd "\Path\To\Your\Service\DLLs"
svcutil YourService.DLL
這將根據您的服務結構創建多個文件。將會有一個.WSDL文件和幾個.XSD文件。如上所示編輯這些文件。
最後,無論使用Visual Studio添加服務引用對話框來選擇編輯.wsdl文件(只需輸入完整的路徑和文件名)生成客戶端代碼或使用SvcUtil工具如下:
svcutil *.wsdl *.xsd /language:C#
相關問題
- 1. Siteminder SSO不保護ASP.NET MVC站點
- 2. WCF暴露TCP端點
- 3. 暴露受保護的Objective-C的實例變量的子類
- 4. WCF數據服務暴露問題
- 5. WCF暴露爲RESTful
- 6. 暴露了LINQ保護收集查詢
- 7. 保護WCF數據服務元數據
- 8. 字體私人和受保護的成員暴露在角度1.x視圖
- 9. 在受保護的站點上無法啓動Java Web Start
- 10. 網站上受保護的CSS?
- 11. 如何從受Shibboleth保護的網站上抓取數據?
- 12. 元數據暴露但WSDL未找到
- 13. WCF類「新」子不暴露
- 14. 在WCF上暴露的REST服務沒有填充參數值
- 15. 流利的NHibernate映射到私有/受保護字段沒有暴露物業
- 16. 在Elastic Beanstalk上暴露POST端點
- 17. 如何暴露在我的WCF服務
- 18. 在wcf服務中暴露的方法
- 19. 暴露net.tcp端點
- 20. 如何在CA SiteMinder上的受保護領域配置公共規則
- 21. 暴露內部網站 - mod_rewrite
- 22. WCF暴露在MEF插件與Asp.net MVC
- 23. 暴露給WCF的ADO.NET數據服務實體
- 24. 在Mule上暴露WebService
- 25. 無法在受保護的WCF服務上訪問WSDL
- 26. 暴露特定領域的WCF
- 27. 阻止WCF暴露我的整個類?
- 28. 暴露會話的CSRF保護令牌安全嗎?
- 29. WCF服務在兩個不同的服務合同上暴露2個端點
- 30. 暴露在Drupal
我可能沒有清楚我的問題:我的問題是,svcutil無法訪問元數據,因爲它受SiteMinder保護。 –
對,您在SvcUtil命令行中使用服務MEX URL,並且由於存在安全隱患,這不起作用。我建議你使用包含服務契約的DLL生成WSDL,然後從中生成客戶端。我會更新答案以明確。 –
哦,我現在明白了:))謝謝你。 –