2013-01-15 52 views
0

我有以下經營合同的WCF服務:WCF HTTP GET參數會導致錯誤的請求

[OperationContract] 
    [WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/VerifyKeys.json/{customerKey}/{userKey}")] 
    [return: MessageParameter(Name = "MyDetail")] 
    MyDetail VerifyKeys(string customerKey, string userKey); 

我的方法是這樣的:

public MyDetail VerifyKeys(string customerKey, string userKey) 
    { 
     ... 
     return _myDetail; 
    } 

我的要求是這樣的:

http://mydomain.com/MyService.svc/web/VerifyKeys.json/FE3D0F1D-5B8B-4677-B332-70B7ABA80A97/08F4349A-30E5-457D-F2BD-70A23CE17F41?deviceId=66345ec6-a5fe-4b5f-8cf2-1b0d8c344dc2&deviceToken=AgTGERCBaS3d8n2QWxF9EtwcLktIoygoXpc8Y42ObZWja3RSjN%2bFBeshaY4ASainj3MusBbVopXbUFQrrgXUOSkAbOA7tChNKOFNKQ2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d&deviceType=Pink24 

我有我的應用程序調用此方法的不同版本。我沒有創建新的方法,而是在最後使用了一個查詢字符串。通過解析url,我可以獲得我需要的附加參數。即。 deviceToken,deviceId,& deviceType

我的請求工作正常,而deviceToken參數較小。現在,向我提供設備令牌的公司已經做得非常大。現在我請求返回錯誤的請求400

AgTGERCBaS3d8n2QWxF9EtwcLktIoygoXpc8Y42ObZWja3RSjN%2bFBeshaY4ASainj3MusBbVopXbUFQrrgXUOSkAbOA7tChNKOFNKQ2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d 

如果我從我的查詢字符串的結尾去掉這些字符,請求經過成功。 「Q2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d」

我已經做了一些研究,發現參數的最大值是255個字符。我的設備令牌只有140.

要增加我的困惑,如果我更改deviceId和deviceToken參數的順序,那麼我必須縮短deviceId參數才能成功發送。另一個值得關注的問題是,如果我嘗試縮短任何其他參數,那麼我的請求仍然失敗。我必須總是縮短第二個參數。

有沒有其他人有類似的問題,並找到了解決辦法?

如何通過路徑末尾的查詢字符串發送我的looong設備令牌?

回答

0

我找到了解決辦法張貼這個問題後。這通常是這樣。

設備令牌被保存到NVARCHAR(100)的字段。以前這已經足夠了。設備令牌現在至少可以有140個字符。我將該字段更改爲NVARCHAR(255)。問題已解決。沒有更多的錯誤請求400.

1

這可能是你的查詢字符串本身的長度,而不是參數。

嘗試增加

<httpRuntime maxQueryStringLength="2500" 
maxUrlLength="2500" maxRequestLength="2500" /> 

到您的配置,看看問題是否解決

+0

這是一個好主意,但我的問題仍然存在。 – Robert