2011-04-01 59 views
0

我正嘗試使用WCF Rest創建日誌記錄服務。它看起來是這樣的:WCF REST超過最大URL長度導致錯誤

[ServiceContract] 
public interface ILoggingService 
{ 
    [OperationContract, WebGet(UriTemplate = "/LogError?m={message}")] 
    void Log(string message); 
} 

我已經在配置文件中增加了限制,所以你可以登錄文本相當數量。但是,如果我超過這個限制,服務不接受消息。到目前爲止,我已確定文本低於限制,但這是一個糟糕的工作。我如何解決WCF REST中的這個問題。

UPDATE

經過進一步調查,我要的東西,看起來像這樣結束了?

[ServiceContract] 
public interface ILoggingService 
{ 
    [OperationContract, WebGet(UriTemplate = "/LogError?m={message}", Method = "POST")] 
    void Log(string message); 
} 

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL); 
request.Method = "POST"; 
request.ContentType = "text/plain"; 
+0

你檢查出城堡WCF設施(http://www.castleproject.org/container/facilities/trunk/wcf/index.html)這簡化了配置,使生活一般比較容易。另外,如果你想單元測試你的服務,他們可以很容易地由單元測試託管。 – 2011-04-01 13:45:41

回答

1

我會建議不使用GET方法。您正在執行的操作是寫入,而不是讀取。如果使用POST,則可以使用媒體類型text/plain發送實體正文。這樣你不受網址長度的限制。

+0

那麼當方法是POST時,如何做HttpWebRequest? – anon 2011-04-01 13:05:17

+0

添加了一個維基鏈接,解釋何時使用每個http請求類型。 – 2011-04-01 13:46:45

1

對於HTTP POST,我認爲簽名看起來像

[OperationContract] 
    [WebInvoke(UriTemplate = "LogError",Method="POST")] 
    void Log(string message); 

利用職位在HTTP請求發送數據,而不是在URL中。

Http get request只能用於讀取數據,發佈創建,更新和刪除刪除。

http://en.wikipedia.org/wiki/Representational_State_Transfer

+0

在只使用GET的想法中,是否存在一個安全問題,無論它的技術(和設計)在哪裏都可能? – Independent 2012-01-03 05:33:08

相關問題