如何让我的json WCF工作

时间:2012-07-05 22:51:54

标签: c# json wcf .net-4.0 wcf-rest

我已经花了很多时间安静地度过了很多时间,但无法使其工作,现在花了几个小时后我能够看到元数据但无法成功调用该操作。以下是步骤和代码。

  1. 创建WCF服务库项目。
  2. 现在代码。

    服务合同和DataContract

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    
    using System.Text;
    
    namespace JsonWCFTest
    {
        [ServiceContract]
        public interface IJsonService
        {
            [OperationContract]
            [WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,UriTemplate = "data/{id}")]
            Product GetProduct(string id);
        }
    
        [DataContract(Name = "product")]
        public class Product
        {
            [DataMember(Name = "id")]
            public string Id { get; set; }
        }
    
    }
    

    服务。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    
    namespace JsonWCFTest
    {
        public class JsonService:IJsonService
        {
            public Product GetProduct(string id)
            {
                return new Product {Id = " you have entered " + id};
            }
        }
    }
    

    的web.config

    <?xml version="1.0"?>
    <configuration>
    
      <system.web>
        <compilation debug="true"/>
      </system.web>  
      <system.serviceModel>
        <serviceHostingEnvironment>
          <serviceActivations>
            <add relativeAddress="service.svc" service="JsonWCFTest.JsonService"/>
          </serviceActivations>
        </serviceHostingEnvironment>
        <services>
          <service name="JsonWCFTest.JsonService" behaviorConfiguration="jsonTestServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost" />
              </baseAddresses>
            </host>
            <endpoint address="jsonTestEndPoint" behaviorConfiguration="jsonTestEndPointBehavior" 
                      binding="webHttpBinding" contract="JsonWCFTest.IJsonService"/>        
    
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>      
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="jsonTestServiceBehavior">       
              <serviceMetadata httpGetEnabled="true"/>       
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
            <behavior name="jsonTestEndPointBehavior">
              <webHttp/>
            </behavior>
          </endpointBehaviors>
        </behaviors>
      </system.serviceModel>
    
    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
    

    当我使用此网址时

      

    http://localhost/service.svc/data/1

    它在Internet Explorer中给我以下错误

      '/'应用程序中的服务器错误。无法找到该资源。   描述:HTTP 404.您正在寻找的资源(或其中一个   依赖项)可能已被删除,其名称已更改,或者是   暂时不可用。请查看以下网址并制作   确保它拼写正确。

         

    请求的网址:/service.svc/data/1

1 个答案:

答案 0 :(得分:1)

您正在连接错误的地址。使用您已设置的配置文件,您应该连接到

http://localhost/jsonTestEndPoint/data/1

您需要使用BaseAddress + EndpointAddress + FunctionAddress来获取完整网址。


我可能有点生疏,如果上述地址不起作用,那么地址将是

http://localhost/service.svc/jsonTestEndPoint/data/1