我正在使用WCF託管一些SOAP服務。如何通過配置關閉這些服務以維護等目的,並向服務消費者提供一個類似於「您所請求的服務已關閉以進行維護」的友好消息。關閉WCF SOAP服務進行維護並提供友好的消息
回答
這樣如何:創建一個自定義的ServiceBehavior來攔截我的傳入請求到服務。然後,讓自定義行爲檢查我的配置文件中的用戶定義標誌,例如<add key="IsMyServiceUp" value="true" />
,並且如果該值返回爲false
,那麼用我友好的消息和HTTP代碼503 - Service Unavailable引發ServiceException。
這聽起來合理嗎?然後,我所要做的就是更改我的配置文件中的標誌,以指定服務啓動或停止的位置。
你將不得不有第二個服務,提供相同的接口,相同的方法等,都將返回友好的消息,而不是一個真實的結果。
當這些服務方法不只是返回一個字符串而是一個複雜的數據對象時,這可能會有點棘手 - 你把那個「友好」的消息放在哪裏?
在現實中,我認爲這不可能真的做到 - 因爲你的服務通常不被實際人員「看到」,所以你不能只放一個app_offline.htm
文件或類似的東西。
儘量減少停機時間,例如,在新端口上設置新版本的服務並在那裏進行測試,直到您有足夠的信心進行切換。
使用WCF,它主要是更新/複製適當的配置周圍的練習,所以你的服務應該永遠不會在任何延長的時間段內無法使用(希望!)。
如果你真的必須,你可以做什麼,只是有可更換的服務,將總是拋出一個FaultContract<ServiceDownForMaintenance>
- 但隨後調用服務的客戶必須瞭解這一點,他們將不得不處理這個並提出錯誤或信息消息。您的服務不能真正提供...
你編輯你的答案添加錯誤合同,所以我刪除我的,但我想添加一個評論:雖然我同意有一個公共服務去「維護」是不應該的東西完成後,可能有這樣做的正當理由;例如,銀行經常長時間下調「交易後」等等。 – Randolpho 2010-07-12 16:34:48
@Shafique:一般而言,您應該避免讓您的服務提供「友善的服務已關閉」信息,*除非*您處於這種情況。如果您在這種情況下*,請確保服務可以停止的事實是合同的一部分,您的服務的消費者*知道*並且可以處理它! – Randolpho 2010-07-12 16:35:26
爲了公平起見,我僅以「維修保養」爲例。出於商業原因,我們需要將我們的服務脫機,並提供一個友好的信息,表明該服務已關閉,但不一定用於維護。感謝您的輸入! – Shafique 2010-07-12 16:39:28
好吧,所以我創建了一個實現IOperationBehavior的新自定義行爲。在驗證方法,我有
public void Validate(OperationDescription operationDescription)
{
bool isServiceUp = Boolean.Parse(ConfigurationManager.AppSettings["IsOrderServiceUp"].ToString());
if (!isServiceUp)
{
throw new ServiceException(ServiceErrorCode.Generic_Server_Exception,
ServiceErrors.Generic_Server_Exception,
SoapFaultCode.Server);
}
}
其他實施方式ApplyClientBehavior
,ApplyDispatchBehavior
和AddBindingParameters
都是空的。
我已經裝飾了我的服務操作之一[ServiceStatusValidation]
,這是我的自定義行爲的類名稱。
當我啓動服務並導航到這個裝飾的操作時,我沒有得到我拋出的異常。 SOAP UI在響應窗格中沒有顯示任何內容,我的消費REST外觀給出了一個通用的400錯誤。異常消息是'服務器沒有提供有意義的回覆;這可能是由於合同不匹配,過早的會話關閉或內部服務器錯誤造成的。「
任何想法?我應該用其他方法之一來實現這個邏輯,而我沒有實現這個方法,而不是Validate
方法?
- 1. Weblogic - 如何將服務器關閉以進行維護?
- 2. SOAP代理服務 - 消費者/提供商關係
- 3. 使用CORS + SOAP + WCF進行HTTPS服務
- 4. 在WCF SOAP消息
- 5. 當WCF服務關閉時顯示消息
- 6. 當在Java中關閉ExecutorService時顯示友好的消息?
- 7. 如何關閉友好的錯誤消息在微軟邊緣
- 8. ATOM爲「企業」提供消息服務
- 9. WCF SOAP服務
- 10. Web服務關閉時顯示消息
- 11. AspNetMembership提供與WCF服務
- 12. 乘客2.2.5 - Apache關閉友好錯誤消息
- 13. Resin 3.0.18/IIS6服務器出現故障消息「服務器當前不可用或因維護而關閉」
- 14. 如何關閉在Chrome上運行的IIS Express中的友好錯誤消息?
- 15. 消費WCF數據服務行動提供了實體框架
- 16. 後的SOAP消息來WCF服務錯誤400
- 17. 如何在WCF服務中提供回調SOAP方法合同?
- 18. 保護WCF服務供iPhone使用
- 19. 閱讀SOAP消息頭WCF
- 20. SOAP,WCF和消息簽名
- 21. WCF SOAP服務不返回HTTP消息正文
- 22. 如何從WCF服務生成SOAP消息?
- 23. WCF HTTP/SOAP web服務 - 在故障返回異常消息
- 24. 通過代理維護的消息,以應用服務器
- 25. 測試WCF服務(不是SOAP/HTTP web服務)的好工具
- 26. 使用提供的wsdl從WCF消費安全的Web服務
- 27. 哪個更好?大量的Web服務調用(SOAP消息)或單個SOAP消息中的大量數據?
- 28. 微軟提供WCF服務的墊片
- 29. WCF服務配置奇怪的行爲 - 請求消息必須保護
- 30. 爲什麼我的WCF服務提供消息「沒有與無消息版本的綁定」?
是的,類似的東西會起作用。但是,我會拋出一個可互操作的'FaultException' - 您的服務的使用者可能不會使用.NET,因此無法真正處理'ServiceException' –
2010-07-12 16:42:09
是的,謝謝你的提問。實際上,我有一個.NET REST-ful服務門面,它使用引發ServiceException的SOAP服務。 REST-ful服務外觀層反過來將捕獲ServiceException,解開我需要的有用信息,並且拋出一個新的WebFaultException,它繼承自FaultException。希望這可以解決上面提到的針對非.NET REST服務使用者的互操作性問題。 –
Shafique
2010-07-12 16:46:59