当尝试创建一个简单的服务来返回一个简单的JSON字符串通过以下几个教程.我被困在两个不同的机器与HTTP Statuscode 400错误的请求.示例教程REST风格的WCF服务与JSON pt.1 & pt.2 -http://www.youtube.com/watch?v=5BbDxB_5CZ8
我也谷歌和搜索这里(StackOverflow)类似的问题没有成功。
问题是我得到了400坏请求时,试图做一个健全的检查浏览到WCF服务和执行方法.通过编译服务和浏览这个地址:http://localhost:49510/Service1.svc/GetPerson就像教程.我已经试图找到一个解决方案一样3天.任何帮助是赞赏.
这就是我的工作
首先,我创建一个新的项目,一个简单的WCF服务应用程序。我删除默认的Service1.svc,并添加一个新的WCF服务,生成一个新的Service1.svc和一个IService1.cs。
下面是接口代码(IService1.cs)
namespace WcfService1
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method="GET", BodyStyle=WebMessageBodyStyle.Bare, ResponseFormat=WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json, UriTemplate="GetPerson")]
Person GetPerson();
}
[DataContract(Name="Person")]
public class Person
{
[DataMember(Name="name")]
public string Name { get; set; }
}
}
字符串
下面是Service1.svc的代码
namespace WcfService1
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
public class Service1 : IService1
{
public Person GetPerson()
{
return new Person() { Name = "Tobbe" };
}
}
}
型
而Web.config是原封不动的,看起来像这样的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>
型
3条答案
按热度按时间puruo6ea1#
对于REST WCF,您必须在web.config中进行绑定和端点设置
替换你的整个web.config如下,它将工作
字符串
你只剩下以下两件事
使用webHttpBinding(将默认http端口Map改为webHttpBinding)
型
指定webHttp端点行为
型
djmepvbi2#
您没有指定任何端点.默认情况下,在WCF 4上,将使用使用basicHttpBinding的端点。它在这里不起作用,因为它是基于SOAP的绑定。您想要使用的是基于REST的webHttpBinding.
下面是如何使用WCF 4覆盖默认绑定:
字符串
您还必须通过在配置中添加此端点行为来启用webHttp:
型
http://msdn.microsoft.com/en-us/library/bb924425.aspx
dba5bblo3#
我不完全确定为什么,但是当我将'Factory'属性添加到我的.SVC文件(您需要显式地将其拖到Visual Studio)时,一切都可以正常工作 * -无需更改Web.config中的默认设置!
我添加了Factory=“System.ServiceModel.Activation.WebServiceHostFactory”,所以我的.SVC文件变成了这样:
第一个月
对此:
<%@ ServiceHost Language="C#" Debug="true" Service="ServiceNameSpace.ServiceName" CodeBehind="ServiceName.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
的唯一的副作用似乎是,当你在浏览器中点击.SVC文件时,你会得到一个“端点未找到”错误,但无论如何,当你正确调用它时,服务都能正常工作。正如前面提到的,我在.NET 4.6(Simplified WCF configuration)中使用默认的Web.config,所以我可能还需要添加端点详细信息才能再次工作。