对RESTful WCF服务的错误请求强制IIS回收应用程序池
问题描述:
我试图创建并托管一个简单的RESTful WCF服务。除1情况外,该服务完美运行。我试图执行一个POST插入一个新的对象到我使用的JSON请求静态列表:对RESTful WCF服务的错误请求强制IIS回收应用程序池
{"sampleItem":{"Id":1,"StartValue":2,"EndValue":3}}
如果我再改的要求是:
{"sampleItemBlah":{"Id":1,"StartValue":2,"EndValue":3}}
我得到一个500响应,并所有未来的POST都将返回一个500错误,直到我回收IIS应用程序池并再次开始工作。
它似乎没有出现服务处于故障状态,因为我仍然可以执行GET并返回数据。我打开了跟踪调试,并且在日志文件中看不到任何错误。
有没有人有任何想法?
这里是我的服务合同:
[ServiceContract]
public interface IWcfRestService
{
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
SampleItem Insert(SampleItem sampleItem);
}
[DataContract]
public class SampleItem
{
[DataMember]
public int Id { get; set; }
[DataMember]
public int StartValue { get; set; }
[DataMember]
public int EndValue { get; set; }
}
这里是我的实现:
public class WcfRestService : IWcfRestService
{
private static readonly List<SampleItem> Items = new List<SampleItem>();
public SampleItem Insert(SampleItem sampleItem)
{
return BaseInsert(sampleItem);
}
private static SampleItem BaseInsert(SampleItem sampleItem)
{
if (Items.Exists(x => x.Id == sampleItem.Id))
Items.RemoveAll(x => x.Id == sampleItem.Id);
Items.Add(sampleItem);
return sampleItem;
}
}
最后这里是我的web.config的我ServiceModel部分:
<services>
<service behaviorConfiguration="Services.ServiceBehavior"
name="WcfRestServiceApp.WcfRestService">
<endpoint address=""
behaviorConfiguration="RESTBehavior"
binding="webHttpBinding"
contract="WcfRestServiceApp.IWcfRestService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="RESTBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Services.ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
任何和所有的帮助,不胜感激。
答
原来的问题是与使用标签:
BodyStyle = WebMessageBodyStyle.Wrapped
当我删除它,要求有:
{"sampleItem":{"Id":1,"StartValue":2,"EndValue":3}}
变成:
{"Id":1,"StartValue":2,"EndValue":3}
这将强制转换为正确的对象类型,如果该字段不存在,则将该值设置为null或类型默认空值。
K,你是新的。这笔交易。这里的人们不会调试你的应用程序。但是,如果您将问题缩小到单个特定情况并询问其发生的原因,您会得到一个很好的答案。如果你抛出一串代码并问“这里有什么问题”,你可能会很幸运,但是你不会这样做。在这种情况下,最好使用尽可能最少的代码来创建演示应用程序,以重现问题。这样,你可以在这三行代码上寻求帮助,而不是“在这里的某个地方是一个bug,为我找到它”。 – Will 2010-03-03 14:28:48
我删除了所有额外的代码。我仍然可以用我留下的代码重新创建问题。我不确定是否在某处丢失了注释/配置,或者是否有需要更改的IIS设置。 – Brandon 2010-03-03 14:52:54
你在使用什么客户端? – 2010-03-03 18:20:54