wcf webHttpBinding Post

wcf webHttpBinding Post 大数据量提交 ios c#客户端

一直在为安卓和苹果写服务,刚开始的时候全用的Get请求用url传所有的参数,由于url长度的限制大的数据量

无法传到服务器,提交图片什么的就更不用说了,后来用的POST请求,记录一下,做了一个很简单的小例子:

c#源代码提供大家下载 10Solution4.rar

ios代码 IOSHttpPostDemo.rar

开始做吧!

1建一个空工程Solution4,添加一个类库WcfSerDemo引入

System.ServiceModel  和System.ServiceModel.Web两个类库

建一个接口IMyWcfServerMethod

?

[ServiceContract]

public interface IMyWcfServerMethod

{    

    [OperationContract, WebInvoke(Method = "POST", UriTemplate = "postMostStr/{streamLength}", BodyStyle = WebMessageBodyStyle.Bare)]

    string postMostStr(string streamLength, Stream getStream);

    //实验一下接收

    [OperationContract, WebInvoke( Method="GET", UriTemplate = "postText")]

    string postText();

}

我们只用 postMostStr这个方法它是以POST形式接收的Url只要一个参数就是传过来的byte的长度

那个Stream类型的台数就是Post过来的数据

建一个类实现这个接口MyWcfServerMethodFace

?

public class MyWcfServerMethodFace:IMyWcfServerMethod

    {

        public string postMostStr(string streamLength, System.IO.Stream getStream)

        {

            try

            {  

                int byLength=Convert.ToInt32(streamLength);

                byte[] resultByte = new byte[byLength];

                getStream.Read(resultByte, 0, resultByte.Length);//把接收的stream写到resultByte

                Console.WriteLine(Encoding.UTF8.GetString(resultByte));//把收到的数据输出到控制台

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.ToString());

            }

            Console.WriteLine("success!");

            return "success!";

        }

        public string postText()

        {

            Console.WriteLine("text!");

            return "text success";

           

        }

    }

好了契约就写好了,宿主程序就用控制台程序

加一个控制程序

引入System.ServiceModel 和 WcfSerDemo

配制App.config

?

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <system.serviceModel>

    <bindings>

      <webHttpBinding><!--这个是接收大数据加的-->

        <binding name="webBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">

          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"

                        maxArrayLength="2147483647" maxBytesPerRead="2147483647"

                        maxNameTableCharCount="2147483647"/>

        </binding>

      </webHttpBinding>     

    </bindings>

    <behaviors>

      <serviceBehaviors>

        <behavior name="mySerBeh">                  

          <serviceMetadata httpGetUrl="mex" httpGetEnabled="true"/>                      

          <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="false"/>

        </behavior>

      </serviceBehaviors>

      <endpointBehaviors>

        <behavior name="webHttpendBehavior">

          <webHttp></webHttp>

        </behavior>

      </endpointBehaviors>

    </behaviors>

    <services>

      <service name="WcfScrverDemo.MyWcfServerMethodFace" behaviorConfiguration="mySerBeh">

        <host>

          <baseAddresses>

            <add baseAddress="http://LocalHost:7789/MySericeDemo"/>

          </baseAddresses>

        </host>

        <endpoint address="" binding="webHttpBinding" bindingConfiguration="webBinding" contract="WcfScrverDemo.IMyWcfServerMethod" behaviorConfiguration="webHttpendBehavior"></endpoint>

      </service>

    </services>

  </system.serviceModel>

</configuration>

在定app.config的时候要注意大小写

让这个服务跑起来吧在控件台应用程序 的Main里加上

using System.ServiceModel;
using WcfScrverDemo;

?

<br><br><br><br><br>static void Main(string[] args)

        {

            

            try

            {

                using (ServiceHost host = new ServiceHost(typeof(MyWcfServerMethodFace)))

                {

                    host.Opened += delegate

                    {

                        Console.WriteLine("server running....");

                    };

                    host.Open();

                    Console.ReadLine();

                }

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.ToString());

                Console.ReadLine();

            }

        }

服务就好了,运行一下吧

下面就开使定客户端了

我们也用控件台应用程序来做客户端:

建一个客户端程序WcfwebHttpClient

回为用的是webHttpBinding我们可以直接传url就ok了,不用配制app.config

很简单的在Main里加上

?

static void Main(string[] args)

        {

            try

            {

                string strPost = "小妞,给大爷笑一个,不笑,那大爷给你笑一个,我和超人唯一的区别就是我把内裤穿里边了." +

                                 "我的饭量你是知道的,而且我也不爱吃烤鸭,所以吃了四只我就吃不下去了,我就说:实在" +

                                 "不能吃了,待会儿回家还要吃饭呢。天堂这儿还有一牌子:天堂周围四百米严禁摆摊!上帝" +

                                 "坐那正抽烟呢。上帝说,必须好好招待,这么些年好容易有个说相声的上了天堂了。一巴掌" +

                                 "宽护心毛,还纹一条带鱼。《<span>金 梅</span>》里唐僧取经那会儿…… 三十多岁没结婚,北京的媒婆" +

                                 "界就轰动了!骑着脖子拉屎,拉干的我拨下去,拉稀的我擦干了,可是他,骑着脖子拉痢疾!" +

                                 "说相声讲究说学逗唱,当你有口吃就不能说相声。,比如你报时,如果你有口吃就出现这样情况" +

                                 "。现在播报北....北...北京...时.. 时....时间...七....七..七点,靠,我一看表都八点半了  ";

                byte[] buffer = Encoding.UTF8.GetBytes(strPost);

                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://LocalHost:7789/MySericeDemo/postMostStr/" + buffer.Length);

                request.Method = "POST";

                request.ContentType = "text/plain";

                request.ContentLength = buffer.Length;

                Stream requestStram = request.GetRequestStream();

                requestStram.Write(buffer, 0, buffer.Length);

                requestStram.Close();

                Stream getStream = request.GetResponse().GetResponseStream();

                byte[] resultByte = new byte[200];

                getStream.Read(resultByte, 0, resultByte.Length);

                Console.WriteLine(Encoding.UTF8.GetString(resultByte));

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.ToString());

            }

            Console.ReadLine();

        }

  跑一下看看什么效果吧

看一看服务有输出 吗

看一看客户端有没有反回

再看一下ios的代码

?

NSString *myString=@"郭:新年新气象,在这里我们代表512的全体室员向大家拜年了,新年快乐,谢谢各位的捧场,支持于:过年好郭:小孩儿们喜欢过年,都盼着过年,岁数大了就这么回事,那会儿来说穿新衣服、吃好吃的现在对我们来说没这个概念于:现在不盼着这个了郭:小时候盼着给红包,给钱,十块二十块钱,乐的跟什么似的于:那就不少啦郭:那天在寝室聊天,他们家亲戚多于:人多郭:一到春节对他来说收获的季节到了,家里人来了,亲戚来了,朋友来了,谦儿呢?于:都找我郭:呦呦呦,有长个儿了,掏出来了郭:给呀,碎钱于:我静弄点零钱了合着,还挨一句骂,您着把它连起来说成不成啊";

    NSMutableURLRequest *request=[[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:[NSString stringWithFormat: @"http://10.0.3.5:7789/MySericeDemo/postMostStr/%d",[[myString dataUsingEncoding:NSUTF8StringEncoding] length]]]];

    [request setHTTPMethod:@"POST"];

    [request setValue:@"text/plain" forHTTPHeaderField:@"Content-type"];

    

    

    

    [request setValue:[NSString stringWithFormat:@"%d",[myString length]]  forHTTPHeaderField:@"Content-length"];

    

    [request setHTTPBody:[myString dataUsingEncoding:NSUTF8StringEncoding]];

    

    [NSURLConnection connectionWithRequest:request delegate:self];

  

好了,简单的小例子就ok了

wcf webHttpBinding Post

时间: 2024-10-25 04:55:22

wcf webHttpBinding Post的相关文章

wcf通过webHttpBinding方式发布rest web服务

1 <system.serviceModel> 2 <services> 3 4 <service name="ServiceUpdater.ServiceUpdate" behaviorConfiguration="http" > 5 <host> 6 <baseAddresses> 7 <add baseAddress="http://localhost:7777/Updater&quo

Wcf体现Restful风格

Wcf体现Restful风格 概述 含状态传输(Representational State Transfer)的软件架构风格.主要特点 1.  资源是由URI来指定: 例如http://example.com/resources/ 2.  对资源的操作 包括获取.创建.修改和删除资源,这些操作正好对应HTTP协议提供的GET.POST.PUT和DELETE方法 3.  传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML ,YAML 等. 下面通过一个简单的例子逐个问题解决

用jQuery的Ajax调用WCF服务编程心得

这两天在写基于WCF服务的后台框架,过程中遇到了一些挫折,经过努力全部解决了,在此分享给大家,使用的工具是Visual Studio 2013. 该后台需要支持通过json来传递和接收数据. 首先,说说搭建过程. 第一步:创建WCF服务应用程序项目WCF. 第二步,创建服务使用的数据类 using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Sch

跟我一起学WCF(12)——WCF中Rest服务入门

一.引言 要将Rest与.NET Framework 3.0配合使用,还需要构建基础架构的一些部件.在.NET Framework 3.5中,WCF在System.ServiceModel.Web组件中新增了编程模型和这些基础架构部件. 新编程模型有两个主要的新属性:WebGetAttribute和WebInvokeAttribute,还有一个URI模板机制,帮助你声明每种方法响应使用的URI和动词..NET Framework还提供了一个新的绑定(WebHttpBinding)和新的行为(We

WCF WEB API配置

Web.config配置 <system.serviceModel> <services> <service name="WCFServiceWebRole2.Service1"> <endpoint contract="WCFServiceWebRole2.IService1" binding="webHttpBinding" behaviorConfiguration="web"

WCF 绑定(Binding)

作者:jiankunking 出处:http://blog.csdn.net/jiankunking 绑定包括多个绑定元素 ,它 们描写叙述了全部绑定要求 .能够创建自己定义绑定 ,也能够使用下表中的当中一个提前定义绑定 : 不同的绑定支持不同的功能.以Ws开头的绑定独立于平台 ,支持 Web服务规范. 以 Net开 头的绑定使用二进制格式,使Net应用程序之间的通信有非常高的性能. 其它功能支持会话.可靠的会话.事务和双工通信. 下表列出了支持这些功能的绑定 . Binding 绑定可指定在与

[转]WCF的几种寄宿方式

转自:WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用.本文分别对这几种方式进行详细介绍并开发例子进行说明,以求大家对WCF寄宿的方式进行全面的认识和了解. 1. WCF服务的IIS服务寄宿 我在我前面几篇WCF开发框架的介绍文章中,介绍过了WCF常用的一种寄宿方式,IIS服务寄宿.这种寄宿方式是最为方便的方式,而且由于服务

使用WCF对外提供接口

本篇将通过WCF以webservices的方式对外提供接口.同时使用NUnit对webservices中的方法进行单元测试. 开发契约 contract Contract项目为类库项目,该项目下会包含WCF中的ServiceContract,这是一些被加上Attribute [ServiceContract]的接口.同时接口中的方法也需要加上Attribute [OperationContract].另,考虑到下一篇要对接口进行压力测试,所以接口中的方法也加上Attribute [WebGet]

wcf精通1-15

随笔- 197  文章- 0  评论- 3407 十五天精通WCF——第一天 三种Binding让你KO80%的业务 转眼wcf技术已经出现很多年了,也在.net界混的风生水起,同时.net也是一个高度封装的框架,作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单了, 再简单的话马路上的大妈也能写wcf了,好了,wcf最基本的概念我们放在后面慢慢分析,下面我们来看看神奇的3个binding如何KO我们实际场景中的80%的业务场景. 一:basicHttpBinding 作为入门第一篇