2013-01-15 61 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