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的行为。

  • 相关阅读:
    jquery 回车切换 tab功能
    Jtemplates 基本语法
    Rdlc报表出现空白页解决方法
    动软代码生成与 EntityFramework 实体生成模板
    windows 无法启动asp.net 状态服务 错误 0x8007277a
    导出Excel Gridview
    错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内 .
    c#与vb.net在App_Code里面编译要通过,需要以下web.config的配置
    個人最近做的最多的重複工作就是excel导出
    Js/Jquery获取iframe中的元素 在Iframe中获取父窗体的元素方法
  • 原文地址:https://www.cnblogs.com/stragon/p/4718353.html
Copyright © 2011-2022 走看看