C# 使用虚拟属性时,WCF Rest GET不返回任何内容
这是我第一次开发RESTWCF服务 这是我为获取数据库中的所有用户所做的:C# 使用虚拟属性时,WCF Rest GET不返回任何内容,c#,wcf,entity-framework,C#,Wcf,Entity Framework,这是我第一次开发RESTWCF服务 这是我为获取数据库中的所有用户所做的: namespace MyCompanyWCFService { [ServiceContract] public interface IMyCompanyService { [WebGet(UriTemplate = "/users", BodyStyle=WebMessageBodyStyle.Bare, Respo
namespace MyCompanyWCFService
{
[ServiceContract]
public interface IMyCompanyService
{
[WebGet(UriTemplate = "/users",
BodyStyle=WebMessageBodyStyle.Bare,
ResponseFormat=WebMessageFormat.Json)]
[OperationContract]
List<User> GetAllUsers();
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
MyClass DoWork();
}
}
MyClass
:
namespace MyCompanyWCFService
{
[DataContract]
public class MyClass
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
public string IHaveNoDataMemberAttribute { get; set; }
[DataMember]
public string NoPublicGet { private get; set; }
[DataMember]
internal ushort InternalProperty { get; set; }
}
}
和web.config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</configSections>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="MyCompanyWCFService.MyCompanyService">
<endpoint address=""
contract="MyCompanyWCFService.IMyCompanyService"
behaviorConfiguration="restfulBehavior"
bindingConfiguration=""
binding="webHttpBinding" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="restfulBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<connectionStrings>
<add name="MyCompanyContext"
providerName="System.Data.SqlClient"
connectionString="Server=.\SQLEXPRESS;Database=MyCompany;Integrated Security=True;MultipleActiveResultSets=True"/>
</connectionStrings>
</configuration>
但是,当我设置这个URI时,http://localhost:7342/MyCompanyService.svc/users
,在我的网络浏览器上,我什么也得不到。我还用PostMan Chrome扩展测试了它,但没有得到任何结果
调试代码context.Users.ToList()代码>返回三个用户
但是,如果我这样做,http://localhost:7342/MyCompanyService.svc/DoWork
,它可以完美地工作:
{“Id”:1,“InternalProperty”:155,“Name”:“Satchmo”,“NoPublicGet”:“Hello world!”}
问题在于公共虚拟
属性。如果我删除virtual
,它会工作,但我需要virtual
延迟加载这些导航属性
如何解决此问题?我已修复了执行此操作时出现的错误context.Configuration.ProxyCreationEnabled=false代码>此处:
public List<User> GetAllUsers()
{
List<User> usersList = null;
using (var context = new AdnLineContext())
{
context.Configuration.ProxyCreationEnabled = false;
usersList = context.Users.ToList();
}
return usersList;
}
公共列表GetAllUsers()
{
List usersList=null;
使用(var context=new AdnLineContext())
{
context.Configuration.ProxyCreationEnabled=false;
usersList=context.Users.ToList();
}
返回用户列表;
}
我已修复了执行此操作时出现的错误context.Configuration.ProxyCreationEnabled=false代码>此处:
public List<User> GetAllUsers()
{
List<User> usersList = null;
using (var context = new AdnLineContext())
{
context.Configuration.ProxyCreationEnabled = false;
usersList = context.Users.ToList();
}
return usersList;
}
公共列表GetAllUsers()
{
List usersList=null;
使用(var context=new AdnLineContext())
{
context.Configuration.ProxyCreationEnabled=false;
usersList=context.Users.ToList();
}
返回用户列表;
}
public List<User> GetAllUsers()
{
List<User> usersList = null;
using (var context = new AdnLineContext())
{
context.Configuration.ProxyCreationEnabled = false;
usersList = context.Users.ToList();
}
return usersList;
}