我有WCF REST / JSON服务,我使用this模板创建它。在我的服务中,我有一个方法
[WebInvoke(UriTemplate = "Create", Method = "*",RequestFormat = WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Bare)]
public void Create(PictureData pictureData)
{
var context = new EFDBContext();
context.PictureData.Add(pictureData);
context.SaveChanges();
}
PictureData这是我的实体数据,我尝试通过EF保存在DB中。
在我的WPF客户端应用程序中,我尝试调用此方法:
using (var client = new HttpClient("http://localhost:8080/ScreenPictureService/Create"))
{
var dataContract = HttpContentExtensions.CreateJsonDataContract(pictureData);
client.Post("", dataContract);
}
但没有任何事情发生
更新
我试试这个
之后var dataContract = HttpContentExtensions.CreateJsonDataContract(pictureData, typeof (PictureData));
var client = new HttpClient();
using(var response = client.Post("http://localhost:8080/ScreenPictureService/Create", dataContract))
{
response.EnsureStatusIs(HttpStatusCode.OK);
}
我收到错误请求400
更新2 我发现了我的问题:
我使用JSON.NET来序列化我的对象,当我收到字节数组时,它转换为base64格式,但我的服务期望字节数组 - 它解决了使用字节列表。
< / LI>第二个问题 - 我尝试接受高清晰度的desctop的screnshot,我有相同的响应(错误请求400),如果我将图片分辨率更改为800x600,服务运行良好,并且有我的问题 - 如何增加请求消息的配额。我在standardEndpoint部分(web.config)
readerQuotas maxArrayLength =“2147483647”maxBytesPerRead =“2147483647”maxDepth =“2147483647”maxNameTableCharCount =“2147483647”maxStringContentLength =“2147483647”
但它不起作用
答案 0 :(得分:0)
您是否尝试使用Fiddler等工具监控确切的请求/响应?也许你的帖子不像你期望的那样?
WCF服务是否知道接受REST?如果您没有使用WCF.WebApi,通常会配置可怕的wcf绑定,例如:
<service name="MyWcfServiceWebRole.xyz.IAbcService">
<endpoint address="" behaviorConfiguration="webby" binding="webHttpBinding" bindingConfiguration="RestBinding" contract="MyWcfServiceWebRole.xyz.IAbcService" />
</service>
<behaviors>
<endpointBehaviors>
<behavior name="webby">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
简单的REST是否可以正常工作?
答案 1 :(得分:0)
我建议Hammock,它很容易且效果很好。
答案 2 :(得分:0)
错误400错误请求可能是由于许多可能性造成的。尝试启用对您服务的跟踪。可以通过链接here来完成。
此外,如果你有一个配置配置文件,如果你使用的是webHttpBinding,请确保你有如下所示的readerQuotas:
<webHttpBinding>
<binding name="RestBinding">
<readerQuotas maxStringContentLength="5242880" maxArrayLength="16384"
maxBytesPerRead="4096" />
<security mode="None">
<transport clientCredentialType="None" />
</security>
</binding>
</webHttpBinding>
如果您使用REST API在global.asax中使用路由定义服务并使用标准端点,请使用以下命令:
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true">
<readerQuotas maxStringContentLength="5242880" maxArrayLength="4194304"
maxBytesPerRead="4194304" />
</standardEndpoint>