zoukankan      html  css  js  c++  java
  • WCF使用小结:(1)WCF接收HTTP POST数据的处理方法

    在WCF 4.0中,为我们创建Restful API有了更好的支持。通过定义UriTemplate,WebInvoke就可以快速开发API接口。

    这里我记录一下HTTP POST数据时要如何接收POST过来的数据。

    1,方法一:Stream inputStream 输入流方法(注意看方法

    例如我的代码

    [OperationContract]
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,
     UriTemplate = "json/ui/{projectName}/{entityName}?q={queryString}&id={indentity}")]
     UpdateOrInsertEntityResponse UpdateOrInsertEntityResponse (String projectName, String entityName, String queryString,String indentity,Stream pstream);

    UriTemplate定义了参数匹配关系。

    "json/ui/{projectName}/{entityName}?q={queryString}&id={indentity}"

    对应的参数

    String projectName, String entityName, String queryString,String indentity

    名称必须相同,否则不能匹配。所有字段必须是String类型。

    如何获取POST过来的数据信息。

    定义Stream pstream参数。

    如果你现在运行应用程序的话,会在页面爆出一个错误信息:

    System.InvalidOperationException: For request in operation UpdateOrInsertEntityResponse to be a stream the operation
    
     must have a single parameter whose type is Stream.

    如何解决。

    第一步,修改你自己的Service.svc文件。

    将原始的

    <%@ ServiceHost Language="C#" Debug="true" Service="Vine.DataMan.RestfulService.EntityService"

    CodeBehind="EntityService.svc.cs" %>

     

    增加新的属性:

    Factory="System.ServiceModel.Activation.WebServiceHostFactory"

    最后结果是:

    <%@ ServiceHost Language="C#" Debug="true" Service="Vine.DataMan.RestfulService.EntityService"

    CodeBehind="EntityService.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

    修改配置文件Web.config

    <system.serviceModel>

    <services>

    <service name="Vine.DataMan.RestfulService.EntityService">

    <endpoint binding="webHttpBinding"

    contract="Vine.DataMan.RestfulService.ServiceContracts.IEntityCommonService"

    behaviorConfiguration="webHttp"/>

    </service>

    </services>

    <behaviors>

    <endpointBehaviors>

    <behavior name="webHttp">

    <webHttp/>

    </behavior>

    </endpointBehaviors>

    <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="true"/>

    </behavior>

    </serviceBehaviors>

    </behaviors>

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

    </system.serviceModel>

    注意加粗的文字。必须定义webHttp的行为。

  • 相关阅读:
    linked-list-cycle-ii leetcode C++
    linked-list-cycle-ii leetcode C++
    binary-tree-maximum-path-sum leetcode C++
    0090 变量的概念,变量的使用:声明、赋值、初始化、语法扩展、命名规范
    0089 变量的概念
    0087 JavaScript注释,JavaScript输入输出语句
    0086 初识JavaScript:是什么、浏览器执行 JS(渲染引擎、解释引擎)、组成、初体验
    0085 计算机基础简介
    0084 编程语言简介
    0083 移动端WEB开发之响应式布局、bootstrap
  • 原文地址:https://www.cnblogs.com/stragon/p/4718353.html
Copyright © 2011-2022 走看看