数据契约
[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>