wcf 数据服务,实现接口功能
来源:互联网 发布:淘宝店铺装修基础版 编辑:程序博客网 时间:2024/05/22 12:18
如果搜百度的话,是这么解释的:
Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。
整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。
但是 这篇文章介绍一下在wcf中如何使用get,post。
1、服务端:
首先在webconfig中进行改变:
<system.serviceModel> <bindings> <webHttpBinding> <binding name="webbinding"></binding> </webHttpBinding> </bindings> <services> <service name="Wcf1.Service1" behaviorConfiguration="testserviceBehavior"> <endpoint address="" behaviorConfiguration="WebBehavior" binding="webHttpBinding" bindingConfiguration="webbinding" contract="Wcf1.IService1"> </endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="testserviceBehavior"> <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false --> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="WebBehavior"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> <protocolMapping> <add binding="basicHttpsBinding" scheme="https" /> </protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel>
这里面进行改变的内容包括:services,behavior,endpointBehaviors
后台代码:
IService1.cs
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。 [DataContractFormat] [ServiceContract] public interface IService1 { [WebGet(UriTemplate = "/Service/GetData/{name}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] [OperationContract] string GetData(string name); [WebInvoke(Method = "POST", UriTemplate = "/Service/GetDataUsingDataContract", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] [OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); // TODO: 在此添加您的服务操作 }
Service1.svc.cs中
public class Service1 : IService1 { public string GetData(string name) { return string.Format("You entered: {0}", name); } public CompositeType GetDataUsingDataContract(CompositeType composite) { if (composite == null) { throw new ArgumentNullException("composite"); } composite.StringValue += "Suffix"; composite.Name += "123"; return composite; } }
单独封装了一个类CompositeType.cs
[DataContract] public class CompositeType { [DataMember] public string StringValue { get; set; } [DataMember] public string Name { get; set; } bool boolValue = true; string stringValue = "Hello "; }
2、客户端(新建的一个一般处理程序):
Program中是这么写的
static void Main(string[] args) { var rc = new Client("http://localhost:13048//Service1.svc"); var uriget = string.Format("Service/GetData/{0}", "yatou"); string retget = rc.get(uriget); Console.WriteLine(retget); const string uripost = "Service/GetDataUsingDataContract"; string postdata = "{\"StringValue\":\"my name is zhangyatoua!\",\"Name\":\"yatou\"}"; //const string postdata = "<CompositeType xmlns=\"http://rest-server/datacontract/CompositeType\"><StringValue>LV</StringValue></CompositeType>"; var retpost = rc.Post(uripost, postdata); //var retpost = rc.JiekouPost(); Console.WriteLine(retpost); Console.ReadLine(); }
封装了一个单独的类Client.cs
public class Client { public Client(string baseuri) { _baseUri = baseuri; } private readonly string _baseUri; public string get (string uri) { var serverurl = string.Format("{0}/{1}", _baseUri, uri); var myRequest = (HttpWebRequest)WebRequest.Create(serverurl); string returnstr; using (var myResponse=(HttpWebResponse)myRequest.GetResponse()) { using(var sr=new StreamReader(myResponse.GetResponseStream(),Encoding.UTF8)) { returnstr = HttpUtility.UrlDecode(sr.ReadToEnd()); sr.Close(); } myResponse.Close(); } return returnstr; } public string Post(string uri,string data) { var serverurl = string.Format("{0}/{1}", _baseUri, uri); var myRequest = (HttpWebRequest)WebRequest.Create(serverurl); var buf = Encoding.UTF8.GetBytes(data); myRequest.Method = "POST"; myRequest.ContentLength = buf.Length; myRequest.ContentType = "text/json"; using (var stream = myRequest.GetRequestStream()) { stream.Write(buf, 0, buf.Length); stream.Close(); } string returnstr; HttpWebResponse response; try { response = (HttpWebResponse)myRequest.GetResponse(); } catch (WebException ex) { response = (HttpWebResponse)ex.Response; } // ReSharper disable once AssignNullToNotNullAttribute using (var sr = new StreamReader(response.GetResponseStream())) { returnstr = sr.ReadToEnd(); } return returnstr; } }
运行结果如下:
第一行是get得到的,第二行是post得到的
0 0
- wcf 数据服务,实现接口功能
- 初见WCF服务接口
- WCF接口服务
- 基于MQTT+WCF 实现Web 接口转即时服务
- 承载WCF 数据服务
- WCF实现REST服务
- 如何使用WCF服务实现分布式处理数据?
- 【WCF】利用WCF实现上传下载文件服务
- 【WCF】利用WCF实现上传下载文件服务
- 发布wcf服务元数据
- Silverlight+WCF实现聊天功能
- WCF RIA 服务 (十一)- 数据 1
- WCF RIA 服务 (十二)- 数据 2
- WCF RIA 服务 (十三)- 数据 3
- WCF RIA 服务 (十四)- 数据 4
- WCF RIA 服务 (十五)- 数据 5
- WCF RIA 服务 (十七)- 数据 7
- 创建Wcf数据服务的事例
- 7.自动布局
- mysql中You can’t specify target table for update in FROM clause错误解决方法
- 一种动态为apk写入信息的方案
- JAVA快速开发平台 - 开源 免费 - JEECG
- android 客户端向发服务端传值,服务端是乱码的解决方法
- wcf 数据服务,实现接口功能
- 房地产行业商业智能解决方案分享
- 优先队列(转载)【非常棒】
- 【技巧】Eclipse常用插件在线安装地址
- 五类关节属性Joint的用法
- FTP服务FileZilla Server上传提示550 Permission denied
- 8.UIVollectionView
- 保持app大小不变 不随系统设置改变而改变
- VC(VS)的64位编程小结