ProtocolViolationException负载测试web服务(具有内容主体的GET操作)



我用一个GET操作创建了一个ASP.NET MVC4 Web API服务(REST)。该操作目前需要11个输入值,因此我没有在URL中传递所有这些值,而是选择将这些值封装到一个类类型中,并将其作为Content-Body传递。当我在Fiddler中测试时,我将动词指定为GET,并在"RequestBody"输入框中输入JSON文本。这太棒了!

问题是当我尝试在VisualStudio2010Ultimate中执行负载测试时。我可以很好地指定GET操作和JSON内容主体。但是当我运行负载测试时,VS在测试结果中报告ProtocolViolationException类型的异常(不能发送具有此谓词类型的内容正文)。测试在1ms内执行,所以我怀疑异常会导致测试立即中止。我能做些什么来避免这些例外情况?我更愿意不更改我的API来使用URL参数,只为使用测试工具。如果由于其他原因我应该更改API,请告诉我。谢谢

我发现提出这个答案比继续讨论更容易。

使用GET发送内容在RFC 2616中没有定义,但尚未被禁止。因此,就规格而言,我们处于一个必须做出判断的领域。

GET通常用于获取资源。因此,您正在使用此谓词和发送的参数检索此资源。由于GET既安全又幂等,因此它是缓存的理想选择。缓存通常基于资源URI进行,有时也基于各种标头。关键是缓存实现——AFAIK——不会使用GET内容(老实说,我在现实世界中从未见过任何包含内容的GET)。在密钥生成中包含内容是没有意义的,因为这会降低缓存的可伸缩性。

如果您有要发送的参数,它们必须在URI中,因为这是定义该URI的部分内容因此,我强烈认为使用GET发送内容是错误的

即使在查看OData之类的实现时,它们也会将标准放在URI中。我无法想象您(或任何)的应用程序需求超出了OData查询需求。

最新更新