2012-03-25 85 views
0

我使用EF Code首先在Azure上创建了数据库,现在我想使用WCF REST公开数据。WCF RESTful服务和EF问题

但是,我收到了一些奇怪的行为。当我想返回一个列表(即Item)时,我的浏览器不能简单地检索它。

当我重新命名的方法,以便返回字符串,返回string.item,那么它的工作原理:/

的Web.config

<configuration> 
<connectionStrings> 
    <add name="CijenolomciContext" connectionString="Server=tcp:*.database.windows.net;Database=myDataBase;User ID=*;Password=*;Trusted_Connection=False;Encrypt=True;" providerName="System.Data.EntityClient"/> 
</connectionStrings> 
<system.serviceModel> 
    <services> 
    <service name="Cijenolomci2.Servis.Service" behaviorConfiguration="ServiceBehavior"> 
     <endpoint address="" binding="webHttpBinding" contract="Cijenolomci2.Servis.IService" behaviorConfiguration="web"/> 
    </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="ServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
     <behavior name="web"> 
     <webHttp/> 
     </behavior> 
    </endpointBehaviors> 
    </behaviors> 
</system.serviceModel> 
<system.web> 
    <compilation debug="true"/> 
</system.web> 
</configuration> 

项目类:

[DataContract] 
public class Item 
{ 
    [DataMember] 
    public int ItemID { get; set; } 

    [Required(AllowEmptyStrings=false, ErrorMessage="You must enter a name!")] 
    [MaxLength(50, ErrorMessage = "Name must be 50 characters or less")] 
    [DataMember] 
    public string Name { get; set; } 

    [MaxLength(100, ErrorMessage = "Description must be 50 characters or less")] 
    [DataMember] 
    public string Description { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a OldPrice!")] 
    [DataMember] 
    public Decimal OldPrice { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a NewPrice!")] 
    [DataMember] 
    public Decimal NewPrice { get; set; } 

    [Required(AllowEmptyStrings = false, ErrorMessage = "You must enter a SaleStarts date!")] 
    [DataMember] 
    public DateTime SaleStarts { get; set; } 

    [DataMember] 
    public DateTime? SaleEnds { get; set; } 

    [DataMember] 
    public int CategoryID { get; set; } 

    [DataMember] 
    public virtual Category Category { get; set; } 
} 

IService:

[OperationContract] 
    [WebGet(UriTemplate = "/items/", ResponseFormat = WebMessageFormat.Json)] 
    List<Item> GetItems(); 

Service.svc:

public List<Item> GetItems() 
    { 
     var result = db.Items.AsNoTracking().ToList();   

     return result; 
    } 
+0

你有什么错误? – 2012-03-25 14:34:13

+0

在fiddler HTTP 504中 – Bip 2012-03-25 14:36:46

回答

1

的夫妇建议我可以是:

你的一个Item类的属性是:public virtual Category Category { get; set; }是在Category类也[DataContract]

检查Windows事件查看器,看看是否有错误记录。有时如果WCF错误足够严重,并且它是IIS托管的,那么w3wp.exe进程会向Windows日志丢失一个错误。

打开WCF跟踪日志记录(仅Google“wcf跟踪日志记录”)并查看它是否在服务器上记录错误。