我有一个 WCF RESTful Web 服务(使用 webHttpBinding),当我尝试在其上调用 Web 服务方法时返回 400。
如果我转到 mywebservice.svc,我会得到标准的 WCF Web 服务页面。但是如果我去 /mywebservice.svc/some/rest/service/url,我会得到一个 Http 400。每次。参数或被调用的方法无关紧要。
以下是我们目前所看到的:
- 查看 IIS Express 日志。没有 Win32 状态(即状态 0)与 HTTP 状态一起出现
- 打开 WCF 日志记录。WCF 没有记录任何内容,这表明该请求甚至没有达到那么远。
- 尝试调试我们的方法,但断点永远不会被命中。
- 尝试在 Cassini 下运行该服务。结果相同(http 400)。
- 在有问题的机器上尝试了另一个用户。结果相同。
我们知道这适用于其他机器。有问题的机器在 Win XP 上使用 VS 2010。我们正在使用 WCF 4.0
我知道这里没什么可做的,因为我们没有特定的错误消息,但是鉴于我们已经查看的位置,是否有人对下一步查看位置有任何建议?
更新:添加的代码示例 这是我的一种方法的定义,以及该方法的实现。
[ServiceContract]
public interface IMAMDataWebService
{
[WebGet(UriTemplate = "/Contracts/{taxID}", ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
ContractCollection Contracts(string taxID);
}
public ContractCollection Contracts(string taxID)
{
ContractCollection contracts = new ContractCollection();
try
{
contracts = _contractService.GetContracts(taxID);
}
catch (RstsException rEx)
{
if (!rEx.Logged)
_errorLogger.LogError(rEx);
WebFault.ThrowFault(rEx, HttpStatusCode.InternalServerError);
}
catch (Exception ex)
{
RstsException rEx = new RstsException(ex);
_errorLogger.LogError(rEx);
WebFault.ThrowFault(rEx, HttpStatusCode.InternalServerError);
}
if (contracts.Count == 0)
{
WebFault.ThrowFault(Strings.ObjectNotFound, HttpStatusCode.NotFound);
}
return contracts;
}
我用网络浏览器调用它,即 MAMDataWebService.svc/Contracts/123456789
我确信这一定是权限问题,但我不确定是什么问题。它适用于我们所有使用 VS 2010 的 Win 7 机器,但少数用户仍然有 XP,他们就是问题所在。但是没有任何错误,很难说出发生了什么。