如何从客户端应用程序调用WCF REST / JSON服务

时间:2011-10-13 17:16:09

标签: c# wcf json rest

我有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);
        }

但没有任何事情发生

  • 我还尝试在WebInvoke属性中使用Method =“POST”
  • 此外,我尝试在HttpClient中使用没有“Create”的地址,然后在client.Post中使用它在第一个参数中

更新

我试试这个

之后
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”

但它不起作用

3 个答案:

答案 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>