IService.cs
//it is working fine with Xml
[OperationContract]
[WebGet(UriTemplate = "/PrintProductCategory",RequestFormat=WebMessageFormat.Xml,ResponseFormat = WebMessageFormat.Xml)]
List<ProductCategory> GetProductCategory();
//it is not working with Json
[OperationContract]
[WebGet(UriTemplate = "/Print",RequestFormat=WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)]
List<ProductCategory> GetProductCategory();
Service.cs
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class Service : IService
{
ARserviceEntities de = new ARserviceEntities();
public List<ProductCategory> GetProductCategory()
{
var procat = from t in de.ProductCategories select t;
return procat.ToList();
}
}
的web.config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
<buildProviders>
<add extension=".edmx" type="System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider" />
</buildProviders>
</compilation>
</system.web>
<system.serviceModel>
<services>
<service name="Service" behaviorConfiguration="ServBehave">
<!--Endpoint for REST-->
<endpoint address="rest" binding="webHttpBinding" behaviorConfiguration="restPoxBehavior" contract="IService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServBehave">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<!--Behavior for the REST endpoint for Help enability-->
<behavior name="restPoxBehavior">
<webHttp helpEnabled="true" />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
<connectionStrings>
<add name="ARserviceEntities" connectionString="metadata=res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl;provider=System.Data.SqlClient;provider connection string="data source=GOVINDA-PC;initial catalog=ARservice;persist security info=True;user id=sa;password=sa_12345;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
说明:
这里我的休息服务正常使用XML.But当我使用 ResponseFormat = WebMessageFormat.Json 时,我在网页上收到错误没有数据被收回。 但是对于XML来说它是可行的。所以请帮我解决这个问题。
答案 0 :(得分:0)
您可以尝试使用fiddler来实际查看HTTP流量方面的情况。请参阅http://fiddler2.com/。
答案 1 :(得分:0)
我在最近的一个项目中工作,只是检查了我的配置,我看不到与你的任何明显不同的东西。我只能看到不同的东西(长镜头)是我在具体的类实现上指定了[WebGet]属性,并使用了[WebInvoke]
所以IService.cs会变成..
[OperationContract]
List<ProductCategory> GetProductCategory();
和Service.cs将是......
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class Service : IService
{
ARserviceEntities de = new ARserviceEntities();
[WebInvoke(UriTemplate = "/Print", Method = "GET", ResponseFormat = WebMessageFormat.Json)]
public List<ProductCategory> GetProductCategory()
{
var procat = from t in de.ProductCategories select t;
return procat.ToList();
}
}
看不出为什么会有所作为,但可能值得一试!
答案 2 :(得分:0)
我可以说我的情况有什么问题。
<强> IService.cs 强>
[OperationContract]
[WebGet(UriTemplate = "/Print",RequestFormat=WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)]
List<ProductCategory> GetProductCategory();
Service.cs:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class Service : IService
{
ARserviceEntities de = new ARserviceEntities();
public List<ProductCategory> GetProductCategory()
{
var procat = from t in de.ProductCategories select t;
return procat.ToList();
}
}
我的XML
档案也是对的。
问题是什么:
问题是我使用.EDMX
作为数据库。
<强>解决方案强>
我只是将.dbml
用于数据库。我可以解决我的问题。
备注:
每当您在WCF Service
中制作visual studio 2010
时,请使用.dbml
代替.edmx
。如果您想以json
或xml
格式检索结果。
如果有人像我的问题一样击剑,那么他们可以尝试这个答案。
我希望它会帮助别人。