WCF参数及配置相关(get/post方法)

6 篇文章 0 订阅

数据契约

 [DataContract]
    public class Gis84Info
    {
        [DataMember]
        public string lon { get; set; }

        [DataMember]
        public string lat { get; set; }

        public string test { get; set; }
    } 

只有声明为DataContract的类型的对象可以被传送,且只有成员属性可以被传送,成员方法不会。

在上面类中,LON LAT属性声明为DataMember(数据成员)。TEST成员没有被声明为DataMember,因此在交换数据时,不会传输TEST的任何信息。

DataContract也支持Name/Namespace属性,如同ServiceContract,Name和Namespace可以自定义名称和命名空间。

声明为DataMember的成员也可以自定义客户端可见的名称。如下:

[DataMember(Name="lonValue")]
   public string lon { get; set; }

==========wcf中的post与get使用=================

GET取数据,POST传数据。

GET把数据队列加到URL中,post通过HTTP POST机制传送。

GET受限于URL长度,不能大于2kb,post传送量大。

GET方法:

[OperationContract]
    [WebGet(UriTemplate = "GetJYXL/{jh}", BodyStyle = WebMessageBodyStyle.WrappedRequest,
         ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    List<JYXL> GetJYXL(string jh);

定义:

public List<JYXL> GetJYXL(string jh)
 {
    return new List<JYXL>();
 }

POST方法:

1、Service属性定义

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service : IService

2、方法定义

[OperationContract]
   [WebInvoke(UriTemplate = "SaveYj_YjsjData", Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,
            ResponseFormat = WebMessageFormat.Json)]
   string SaveYj_YjsjData(Stream stream);
public string SaveYj_YjsjData(Stream stream)
        {
            StreamReader sr = new StreamReader(stream);
            try
            {
                string s = sr.ReadToEnd();
                sr.Dispose();
                NameValueCollection nvc = System.Web.HttpUtility.ParseQueryString(s);
                string yjsjid = nvc["yjsjid"];
                string data = nvc["data"];
                return .......;
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }
            finally
            {
                if (sr != null)
                {
                    sr.Close();
                }
            }
        }

3、注意相关配置web.conifg:

<services>
      <service behaviorConfiguration="YJ_Service_PostSerBeh" name="YJ_Service.Service">
        <endpoint address="" behaviorConfiguration="webHttp" binding="webHttpBinding" name="post" contract="YJ_Service.IService"/>
        <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"/>
      </service>
    </services>
    -----------------------------
     <webHttpBinding>
        <binding name="webBinding" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
          maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webHttp">
          <webHttp/>
          <!--<enableWebScript />如果需要支持脚本调用请启用此项-->
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="YJ_Service_PostSerBeh">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值