没有获得Json格式的服务结果?

时间:2014-01-22 09:32:17

标签: c# asp.net json wcf service

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=&quot;data source=GOVINDA-PC;initial catalog=ARservice;persist security info=True;user id=sa;password=sa_12345;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

说明:

这里我的休息服务正常使用XML.But当我使用 ResponseFormat = WebMessageFormat.Json 时,我在网页上收到错误没有数据被收回。 但是对于XML来说它是可行的。所以请帮我解决这个问题。

3 个答案:

答案 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。如果您想以jsonxml格式检索结果。 如果有人像我的问题一样击剑,那么他们可以尝试这个答案。

我希望它会帮助别人。