wcf 数据服务,实现接口功能

原创 2016年03月23日 16:42:36

            如果搜百度的话,是这么解释的:

   Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。
   整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTPFTP的相关技术。

              但是      这篇文章介绍一下在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得到的












版权声明:本文为博主原创文章,未经博主允许不得转载。

WCF和ASP.NET Web API

一、WCF是什么?        Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。  ...
  • liuguobo
  • liuguobo
  • 2015年08月18日 12:43
  • 1429

WCF、WebAPI、WebService之间的区别

Web Service 1、它是基于SOAP协议的,数据格式是XML 2、只支持HTTP协议 3、它不是开源的,但可以被任意一个了解XML的人使用 4、它只能部署在IIS上  W...
  • u013043518
  • u013043518
  • 2016年06月30日 20:47
  • 3154

WCF与Web API 区别(应用场景)

如果服务需要在http协议上,并且希望利用http协议的各种功能, 如果服务需要被各种客户端(特别是移动客户端)调用,选择Web?API ?应用场景: 1.SOAP?Services:这是因为W...
  • admindong
  • admindong
  • 2016年09月13日 20:13
  • 1162

WCF接口(简单从数据库查询数据 )

1:新建一个Wcf 服务应用程序       新建项目- 其他语言-Visual C# - WCF 服务应用程序 2:在已经建好的项目里面添加一个WCF服务(UserService-服务名),添加...
  • CSSANDWPJ
  • CSSANDWPJ
  • 2017年06月13日 20:01
  • 521

Post方式调用wcf服务

我们平常在PC端调用WCF服务,只要知道WCF服务的地址,客户端直接添加引用服务就可以使用了,殊不知还有其他方式,其实,我们也可以 通过HTTP POST的方式调用WCF服务,这样就不用添加引用了,在...
  • zx13525079024
  • zx13525079024
  • 2014年05月26日 12:03
  • 10739

WCF中接口与WCF契约

WCF中接口与WCF契约     接口特性  接口不可以被实例化  实现类必须实现接口的所有方法  实现类可以实现多个接口  接口中的变量都是静态常量   理解契约式编程    ...
  • szstephenzhou
  • szstephenzhou
  • 2012年08月03日 00:23
  • 4245

WCF开发步骤

1. 开发服务(Service) (1)新建WCF服务应用程序 WCF是.NET3.0新增的,如果要在Visual Studio 2005下开发WCF应用程序,需要安装Visual Studio ...
  • Candy1232009
  • Candy1232009
  • 2012年06月11日 21:51
  • 5602

基于WCF 的远程数据库服务访问技术

原文出处:http://www.lw80.cn/shuji/jsjlw/13588Htm.Htm 摘要:本文介绍了使用WCF 建立和运行面向服务(SOA)的数据库服务的系统结构和技术要素,分析了WC...
  • chelen_jak
  • chelen_jak
  • 2013年01月20日 11:06
  • 7641

WCF接口、抽象类等数据契约传递方式

WCF接口、抽象类等数据契约传递方式
  • QQ282030166
  • QQ282030166
  • 2016年11月08日 17:51
  • 650

WCF中使用Swagger框架实现接口文档自动化

在多年开发过程中,发现文档的书写、整理、实时同步更新、及时测试是一件很耗时的事情,但是得做。 我们可以通过使用Swagger实现接口文档自动化,更好的提高个人或者团队工作效率。 在网上查阅发现有很...
  • sunshineyang1205
  • sunshineyang1205
  • 2017年12月21日 16:33
  • 121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:wcf 数据服务,实现接口功能
举报原因:
原因补充:

(最多只允许输入30个字)