WCF服务返回json

时间:2012-10-13 15:03:55

标签: json wcf browser

我希望我的WCF服务返回json。

我在ASP.NET Development Server上测试它,它可以在WCF测试客户端上运行(方法调用没问题)。

但是,浏览器测试失败,错误400错误请求。

web.config

<configuration>
   <system.web>
      <compilation debug="true" targetFramework="4.0" />
   </system.web>
   <system.serviceModel>
      <services>
         <service name="WebServiceExample" 
                  behaviorConfiguration="MetadataBehaviour">
            <endpoint 
                address="" 
                behaviorConfiguration="AjaxBehaviour" 
                binding="webHttpBinding" 
                contract="WebService.IWebServiceExample">
               <identity>
                  <dns value="localhost" />
               </identity>
             </endpoint>
          </service>
      </services>
      <behaviors>
          <serviceBehaviors>
             <behavior>
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
             </behavior>
             <behavior name="MetadataBehaviour">
                 <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
             </behavior>
          </serviceBehaviors>
          <endpointBehaviors>
             <behavior name="AjaxBehaviour">
                 <webHttp/>
             </behavior>
          </endpointBehaviors>
       </behaviors>
       <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
   </system.serviceModel>
   <system.webServer>
      <modules runAllManagedModulesForAllRequests="true"/>
   </system.webServer>
</configuration>

合同

[ServiceContract]
public interface IWebServiceExample
{        

    [OperationContract]
    [WebGet(UriTemplate = "/check/{key}",
       ResponseFormat = WebMessageFormat.Json)]
    DataElement Check(string key);
}


[DataContract]
public class DataElement
{

    [DataMember]
    public string Key { get; set; }

    [DataMember]
    public DateTime DateSince { get; set; }

    [DataMember]
    public DateTime DateTill { get; set; }       
}

SVC标记:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WebService.WebServiceExample" 
    CodeBehind="WebServiceExample.svc.cs" %>

我尝试的URI是:

http://localhost:16679/WebServiceExample.svc/check/asd

1 个答案:

答案 0 :(得分:1)

呃。我得到了它。 如果我告诉别人我是如何完成的话,我认为对其他人有用。

首先,WCF服务应用程序和WCF服务库之间存在差异。我认为如果在服务应用程序中将端点设置为端点可能会导致冲突,因为它是由服务器(IIS或ASP.NET开发)设置的。

其次,我的错误是在服务名称属性中的缺少命名空间。我设置了name =&#34; WebServiceExample&#34;而不是name =&#34; WebService.WebServiceExample&#34;。

我是WCF中的新手,对我而言,名字属性意味着服务全班级名称并不明显。错误文本并没有表明它。

我在阅读这个主题后来到了它 WCF REST Service returns HTTP 400 Bad Request

出现的方法是在Global.asax中定义路由(变态方式,但它有效)。

第三,我认为我的服务允许我查看wsdl页面是错误的。奇怪的是 RESTful WCF服务生成wsdl ,它看起来像是错误。但我知道我可以说这是正常行为。

如果在配置设置这样的东西                    

然后您的RESTful服务将允许显示

localhost / Service.svc上的WSDL?wsdl

在localohost / Service.svc / help

上的REST函数

最后,一些有用的链接: http://www.codeproject.com/Articles/167159/How-to-create-a-JSON-WCF-RESTful-Service-in-60-sec --- WCF服务库。我需要以管理员身份启动VS来运行它。

http://robbincremers.me/2012/01/05/wcf-rest-service-with-xml-json-response-format-according-to-content-type-header/ --- WCF服务应用程序