2012-05-15 29 views
1

我正在使用WCF創建ReSTful服務。說我的OperationContract的是這樣的:在WCF Rest服務中找不到終端的自定義消息

[OperationContract] 
[WebGet(
ResponseFormat = WebMessageFormat.Json, 
BodyStyle = WebMessageBodyStyle.Wrapped, 
UriTemplate = "GetItemList/{token}/{value}" 
)] 
Stream GetItemList(string token); 

所以,當我打電話http://example.com/Service1.svc/GetItemList/myToken/myValue該服務將被調用。

現在我想寫一個默認的方法說着什麼聯繫,「沒有方法/結束點存在」,文用戶來電 http://example.com/Service1.svc/GetItemList/myToken/http://example.com/Service1.svc/GetItemList/myValue/http://example.com/Service1.svc/GetItemList/

我如何能實現,在我的代碼?

現在我做的是什麼樣的:

[OperationContract] 
[WebGet(
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Wrapped, 
    UriTemplate = "GetItemList/" 
)] 
string ValidateItemList(); 

[OperationContract] 
[WebGet(
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Wrapped, 
    UriTemplate = "GetItemList/{Val1}" 
)] 
string ValidateItemList(string Val1); 

而且在功能,我只返回一個字符串說:「沒有方法存在」。

有沒有更好的方法?我可以自定義錯誤消息,指向我的服務的網址嗎?假設,針對所有不存在的網址請求的常見消息都是針對我的服務的?

+0

我也願意回答這個問題,我發佈了類似的問題,並指出到調度組件,但調度員與端點相關聯,並且整個觀點是,svc主機不會爲不特定匹配給定uri模板的請求創建任何端點。 –

+0

@NathanTregillus,是的。確實如此。我想要的就像Try-Catch中的Finally。當請求不匹配任何URI時將執行的默認函數。似乎沒有任何選擇。 –

回答

0

我沒有找到任何可行的解決方案,我的上述問題。但我找到了另一種選擇。在VS 2012中,微軟發佈了ASP.NET Web API。他們說,這是WCF Rest的下一個版本。所以在這裏,你可以很容易地處理這些情況。我們可以在其中使用路由方法。

任何intrested該解決方案,可以看看這個帖子了先機:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

0

基本上,WCF的體系結構嘗試將任何協議的低級別組件(在本例中爲http)抽象出去,因此您不必擔心這些類型的細節。不幸的是,Ÿ,該引擎不公開處理請求的好方法,即引擎無法正確路由。

在這種情況下,URI不能被「分派」到正確的契約實現類。引擎有這些美妙的組件,叫做Dispatchers,可以通過配置或編程方式在wcf框架中定製。問題在於他們實施起來很痛苦。我已經實現了意想不到的消息調度在回答另一個問題時,列舉如下:

Handling Invalid URI passed to a WCF service

讓我知道如果你需要任何進一步的信息!