0

很确定这是一个 IIS 配置问题,因为它在我们的本地开发和测试环境中有效,但在生产环境中无效。虽然无法找到配置问题,因此提出了这个问题。

这是有问题的服务方法

    [WebInvoke(UriTemplate = "GetSpecificData/{type}/{id}/{categories}", Method = "POST", ResponseFormat = WebMessageFormat.Json)]
    [OperationContract]
    string GetSpecificData(string id, string type, string categories);

例如,我们用这个 url 调用它:

/Services/MapService.svc/GetSpecificData/Office/18.029788,59.332478/0

在生产中,它会立即导致 http 状态 400 和来自服务器的“错误请求”。在本地和我们的测试环境中,它工作得很好。

我们认为问题与 ID 部分有关。如果我们将其更改为几乎任何其他内容,无论差异多么小,它似乎都有效。这里有些例子

不起作用:18.029788,59.332478

作品

  • 19.029788,59.332478 作品
  • 28.029788,59.332478 作品
  • 18.129788,59.332478 作品
  • 18.029788,59.432478 作品
  • 18.029788,59.asdfasd332478
  • 18.asdf029788,59.332478

不起作用:16.163657,60.146846

作品

  • 16.263657,60.146846
  • 16.363657,60.146846
  • 16.463657,60.146846
  • 16.563657,60.146846
  • 16.663657,60.146846
  • 16.163657,60.246846
  • 16.363657adsfasdfasdfasdf,60.146846asdfasdfasdfa

在我们寻找答案和缩小范围的过程中,我们得出了一些结论

  • HTTP 或 HTTPS 无关紧要
  • 没有 ISA 或 FW 导致它
  • url 中的奇怪字符(如逗号或点..)不是问题
  • 请求的长度不是问题,它可以更长(260个字符)

拜托,拜托,希望有人对这可能是什么有想法。它让我发疯没有弄清楚。显然有办法通过重写服务以获取查询参数或类似的方法来解决问题,但我真的很想了解导致这个问题的原因

4

1 回答 1

0

显然“400 Bad request”并不意味着 IIS 拒绝了进入您的应用程序的请求(就像我们认为的那样)。我们设法在生产机器上设置了一个跟踪,最后发现它确实输入了代码,并且有一个 LINQ OrderBy 使用了一个有时为空的字段。所以最后一个简单的 NullReference ......

于 2012-08-23T08:58:35.150 回答