2010-03-03 84 views
0

我试图创建并托管一个简单的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> 

任何和所有的帮助,不胜感激。

+0

K,你是新的。这笔交易。这里的人们不会调试你的应用程序。但是,如果您将问题缩小到单个特定情况并询问其发生的原因,您会得到一个很好的答案。如果你抛出一串代码并问“这里有什么问题”,你可能会很幸运,但是你不会这样做。在这种情况下,最好使用尽可能最少的代码来创建演示应用程序,以重现问题。这样,你可以在这三行代码上寻求帮助,而不是“在这里的某个地方是一个bug,为我找到它”。 – Will 2010-03-03 14:28:48

+0

我删除了所有额外的代码。我仍然可以用我留下的代码重新创建问题。我不确定是否在某处丢失了注释/配置,或者是否有需要更改的IIS设置。 – Brandon 2010-03-03 14:52:54

+0

你在使用什么客户端? – 2010-03-03 18:20:54

回答

0

原来的问题是与使用标签:

BodyStyle = WebMessageBodyStyle.Wrapped 

当我删除它,要求有:

{"sampleItem":{"Id":1,"StartValue":2,"EndValue":3}} 

变成:

{"Id":1,"StartValue":2,"EndValue":3} 

这将强制转换为正确的对象类型,如果该字段不存在,则将该值设置为null或类型默认空值。

相关问题