我有一個場景,我將需要任意數量的服務器來提供相同的SOAP Web服務。我想生成一組代理類,並能夠向它們提供一個位置,以便在運行時將它們指向不同的服務器。不幸的是,它好像wsdl:port
節點(wsdl:service
的子節點)要求硬編碼特定服務器的地址。看來,由於這個URL將被烘焙到我的代理類。我知道我可以通過手動編輯生成的代理類或修改代碼生成來修改此操作,但我真的不想訴諸於此。我覺得有必要有更好的方法來解決這個問題。我只是想將接口定義與服務將駐留的位置分開。我使用VS2008和C#.NET,如果有任何幫助的話,儘管最好的解決方案是針對此問題的語言不可知(SOAP或WSDL特定)通用解決方案。SOAP Web服務:許多服務器,一個接口
回答
向項目中添加Web引用時,會將Web服務的地址放入應用程序/ Web應用程序的.config文件中。然後,您可以簡單地在配置文件中更改此設置,以指向不同的Web服務位置,假設服務是相同的。
不,在.NET中,您可以在運行時更改URL。
Service svc = new Service();
svc.url = "Value read from config. file or some such"
output = svc.method (input);
如果您使用的是Web引用(預WCF)來獲取到Web服務,您可以簡單地設置您創建後,Web服務代理類的Url屬性。
對於WCF,您可以爲代理類構造函數提供不同的端點地址,而不是使用默認值(以及其他可能的解決方案)。
爲什麼你不負載平衡Web服務器,然後爲負載平衡的IP地址創建一個DNS條目....本質上創建一個網絡農場。這將允許您引用主機名而不是靜態IP地址,並且如果您需要更改負載均衡器或Web服務器的IP地址,則這是一次性更改。此外,您還擁有冗餘和性能控制。
正是我要說的。使用反向代理。 +1 – ConcernedOfTunbridgeWells 2009-01-13 21:01:08
客戶端代理具有您可以在運行時設置的URL屬性。爲了使它更簡單,wsdl.exe實用程序有/appsettingurlkey
密鑰。當您生成客戶端代理時,它的構造函數將檢查appSettings中的鍵並相應地設置服務URL。我相信WCF也有這個功能。
但是,我會同意@Matt,並建議您考慮負載平衡作爲長期的最佳解決方案。
- 這是用於縮放(每個服務器提供相同的數據),用於在每個服務器上相同的API不同的數據或
- ?
對於2,那麼你可以像上面那樣做,只需更改代碼中的服務URL即可。
對於1,您可以使用循環法DNS(例如,您可以在命令行類型nslookup www.google.com
處看到多個服務器)。
以下是關於如何決定WSDL URL的提示。我只是在改變港口,但當然可以讓它更先進。
public class PortChangeReflector : SoapExtensionReflector
{
public override void ReflectDescription()
{
ServiceDescription description = ReflectionContext.ServiceDescription;
foreach (Service service in description.Services)
{
foreach (Port port in service.Ports)
{
foreach (ServiceDescriptionFormatExtension extension in port.Extensions)
{
SoapAddressBinding binding = extension as SoapAddressBinding;
if (binding != null && !binding.Location.Contains("8092"))
{
binding.Location = binding.Location.Replace("92", "8092");
}
}
}
}
}
}
假如把它放在你的Add_Code
並添加以下內容,您的web.config。
<webServices>
<soapExtensionReflectorTypes>
<add type="Dev.PortChangeReflector,App_Code"/>
</soapExtensionReflectorTypes>
</webServices>
我希望你能得到這個新的想法。
- 1. SOAP Web服務連接
- 2. Web服務接口
- 3. 服務器到服務器Web服務
- 4. Android Web服務SOAP
- 5. iPhone Soap Web服務
- 6. SOAP Web服務UI
- 7. SOAP Web服務URL
- 8. Jython SOAP Web服務
- 9. AFNetworking + SOAP Web服務
- 10. java web服務SOAP
- 11. Android SOAP Web服務
- 12. 從SOAP Web服務
- 13. java:沒有Web服務器的基本Web服務接口
- 14. ServiceConstructionException當一個Web服務連接到另一個Web服務
- 15. 多個Web服務器
- 16. Web服務收到一個空的SOAP
- 17. 允許在Web服務器
- 18. Web服務的接口?
- 19. 使用基於soap的web服務將多個圖像上傳到服務器
- 20. java客戶端web服務器連接到多個web服務器
- 21. wcf決定:一個服務多個合同或許多服務
- 22. 無線接口上的Web服務器?
- 23. Microsoft Access 2010鏈接數據服務到SOAP Web服務
- 24. PHP:SOAP Web服務客戶端web服務ASP.NET服務器
- 25. 本地接口,可外接SOAP的Web服務(C#)
- 26. 檢查SOAP Web服務連接
- 27. JSF與EJB SOAP Web服務的連接
- 28. Swift-3 Soap web服務連接錯誤
- 29. 從Javascript連接到SOAP Web服務?
- 30. 通過SSL的SOAP web服務連接
我不認爲這會對我有用,因爲我需要在運行時切換與我交談的服務器。配置文件似乎會限制我編譯(或至少配置)時間。 – sgibbons 2008-12-11 21:03:21