我希望我的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; }
}
<%@ ServiceHost Language="C#" Debug="true"
Service="WebService.WebServiceExample"
CodeBehind="WebServiceExample.svc.cs" %>
我尝试的URI是:
http://localhost:16679/WebServiceExample.svc/check/asd
答案 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服务应用程序