【发布时间】:2013-12-09 00:21:37
【问题描述】:
我希望我的 WCF 服务返回 json。
我在 ASP.NET 开发服务器上对其进行了测试,它在 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
【问题讨论】:
-
您可以查看服务定义(即将浏览器指向
http://localhost:16679/WebServiceExample.svc)吗? -
银忍者,是的。我可以看到带有客户端示例的页面并链接到 wsdl。
-
marc_s,设置 webHttpBinding 是否不足以通过简单的 http requets 进行连接?
-
不,当然 - 是的。我只是错过了查看您的配置 - 抱歉
-
所以没人知道问题出在哪里?