如何可以創建以下在resfull WCF服務模型創建WCF操作調用
動作行爲將調用,其基於在HTTP請求的報頭傳遞的輸入/值驗證所述自定義動作調用。驗證成功後,用戶將被重定向到實際操作。否則會拋出自定義異常,用戶將被重定向到「訪問被拒絕」頁面。
如何可以創建以下在resfull WCF服務模型創建WCF操作調用
動作行爲將調用,其基於在HTTP請求的報頭傳遞的輸入/值驗證所述自定義動作調用。驗證成功後,用戶將被重定向到實際操作。否則會拋出自定義異常,用戶將被重定向到「訪問被拒絕」頁面。
實現自定義驗證的一種方法是通過服務decorator。考慮下面的代碼:
[ServiceContract]
public interface IService
{
[OperationContract]
string GetData(int value);
}
public class Service : IService
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
public class ServiceValidationDecorator : IService
{
private readonly IService m_DecoreatedService;
public ServiceValidationDecorator(IService decoreated_service)
{
m_DecoreatedService = decoreated_service;
}
public string GetData(int value)
{
IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest;
WebHeaderCollection headers = request.Headers;
//Here use the headers to do you custom validation
bool valid = ...
if(!valid)
throw new SecurityException("Access Denied");
return m_DecoreatedService.GetData(value);
}
}
這裏,WCF合同是IService,原始服務實現是Service類。
ServiceValidationDecorator類是一個裝飾器,它執行自定義驗證,然後將請求傳遞給另一個服務。
現在不需要託管服務類,您需要託管ServiceValidationDecorator類。
WCF將會抱怨ServiceValidationDecorator沒有無參數的構造函數。解決這個問題的正確方法是創建一個自定義實例提供(看看this),然後構建ServiceValidationDecorator對象(例如供應商中)是這樣的:
new ServiceValidationDecorator(new Service())
如果你想快速的解決方法只是爲了快速測試這個,簡單地在ServiceValidationDecorator構造函數中構造Service類(這實際上是一個糟糕的設計實踐)。
如果您有很多服務,並且您不想爲每個服務創建裝飾器,請參閱面向方面編程(AOP)。搜索PostSharp或DynamicProxy。
你必須這樣做嗎? (即通過操作行爲)?你不能使用裝飾器嗎?或者也許是AOP方面? –
我不知道3種方式中的任何一種。請給我一個鏈接來閱讀。 –