使用WCF RestFul POST调用时出错,适用于W2003 Server / IIS 6,但无法使其在W2008 IIS7上运行

时间:2010-10-26 15:28:23

标签: wcf iis-7 post

我有一个WCF服务,它使用WebInvoke和POST方法公开了一些方法,这已经在Windows 2003服务器上工作了一段时间了,事情是我必须将服务迁移到新的Windows 2008服务器机器这就是我遇到问题的地方,当我尝试从客户端调用时,我收到错误400 Bad Request。部署到两台机器上的代码是相同的,我一直在尝试使用UnitTest VS2008解决方案和Fiddler2执行调用,同样的请求从w2003服务器返回200 OK响应,但是2008年的400响应。

我有另一个WCF服务基于同样的理念也在2003服务器机器上工作所以我试图在2008服务器上部署它,我发现GET方法在两台机器上都能正常工作但是如果我试着消耗一个简单的POST方法,然后我得到一个ERROR 500.内部服务器错误指向“对象引用未设置为对象的实例”错误。问题是这个方法也正常工作如果我调用其他服务器,调用完全相同,只更改IP,所以我认为IIS 7必定存在一些我无法弄清楚的问题因为代码在w2003 / IIS6上完美运行。我检查了安装的.NET 3.5以及我在论坛上发现的所有内容。

我想我应该发布一些代码,但因为它在W2003机器上工作我不太确定它会有什么不同,我尝试了所有类型的绑定但没有运气的东西,我认为它不应该是必要的,因为我不是想用svctool或VS2008生成任何代理,我只是格式化一个URL请求并将其发送到服务器,如前所述,它在第一台机器上完美运行......

以下是使用fiddler2手工制作的请求示例(在单元测试中,我使用WebRequest类生成具有相同结果的请求对象):

POST http://XX.XXX.XXX.XXX/ServiceiPhone/service.svc/DoWork HTTP / 1.1 主持人:XX.XXX.XXX.XXX User-Agent:FoodLinker / 1.0 接受:text / xml Content-Type:application / json 接受语言:es-es Accept-Encoding:gzip,deflate 内容长度:17 连接:保持活力

{ “数据”: “迈德特”}

服务器上的代码如下所示:

[WebHelp(Comment = "Sample description for DoWork")]
[WebInvoke(UriTemplate = "DoWork")]
[OperationContract]
public SampleResponseBody DoWork(SampleRequestBody request)
{
    //TODO: Change the sample implementation here
    return new SampleResponseBody()
    {
        Value = String.Format("Sample DoWork response: '{0}'", request.Data)
    };
}

web.config文件中没有特殊的绑定配置,正如它在上一台机器上工作之前所述,但在另一台机器上没有。

这是针对测试项目的,我真正想要部署的代码有点复杂,但它的情况类似,我想如果我能设法解决这个问题,我可能会与另一个解决。

任何想法都会非常受欢迎, 提前谢谢

1 个答案:

答案 0 :(得分:0)

好的,所以我终于明白了,这是.NET Framework 3.5的一个问题,安装.NET Framework 3.5 SP1 做了伎俩,所以如果你遇到过这个问题,那么值得一试在这种情况下更新并查看是否存在问题。