返回JSON / XML对象的WCF方法不起作用

时间:2012-03-22 05:36:55

标签: c# asp.net wcf

我是WCF的新手,我正在尝试使用VS 2010和下面提供的代码构建示例应用程序

IProductService.cs

[ServiceContract]
public interface IProductService
{
    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Xml)]
    Products SelectAllProducts();
}
[DataContract]
public class Product
{
    [DataMember]
    public int ProductId { get; set; }
    [DataMember]
    public string Name { get; set; }
}
[CollectionDataContract]
public class Products : System.Collections.ObjectModel.Collection<Product>
{
}

ProductService.cs

public class ProductService : IProductService
{
    public Products SelectAllProducts()
    {
        var products = new Products();
        var prod = new Product();

        prod.ProductId = 1;
        prod.Name = "SAMSUNG";
        products.Add(prod);

        prod = new Product();
        prod.ProductId = 2;
        prod.Name = "RELIANCE";
        products.Add(prod);

        return products;
    }
}

http://localhost:1050/WCFService1/ProductService.svc/SelectAllProducts

的Web.config

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

如果尝试使用上面的url空白显示可以有人帮助我??? 提前谢谢..

2 个答案:

答案 0 :(得分:0)

我没有看到绑定web.config的服务。尝试添加如下所示的行:

<services>
     <service name="[Your Namespace].ProductService">
                <endpoint address="" binding="webHttpBinding" contract="[Your Namespace].IProductService" />
     </service>
</services>

webHttpBinding用于REST WCF服务非常重要。您还需要附加webHttpBehavior - 这可以通过在您的svc文件中使用WebServiceHostFactory来实现。例如,

<%@ServiceHost Language="C#" Service="[YourNameSpace].ProductService" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

有关详细信息,请参阅以下内容:

http://saravananarumugam.wordpress.com/2011/03/04/simple-rest-implementation-with-webhttpbinding/
http://msdn.microsoft.com/en-us/magazine/dd315413.aspx

答案 1 :(得分:0)

在界面中进行一些更改

 [ServiceContract(Namespace = "JsonpAjaxService")]    
interface IService
{

    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    method() 

}

在类上添加一些代码,如下所示

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService

你的web.config文件就像这样

  <?xml version="1.0"?>
 <configuration>  
 <system.web>
  <compilation debug="true" targetFramework="4.0" />
  <authentication mode="None" />
  </system.web>
 <system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
 <system.serviceModel>
   <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  <standardEndpoints>
    <webScriptEndpoint>
       <standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
    </webScriptEndpoint>
  </standardEndpoints>
 </system.serviceModel>
 </configuration>