一个用Json格式来发送一个Post请求到WCF服务

测试实体类:(需要在客户端和服务端建了有相同字段名称的实体)

public class CompositeType
    {
        public CompositeType()
        {
            SubCompositeTypes = new List<SubCompositeType>() { new SubCompositeType() };
        }
        public bool BoolValue { get; set; }
        public string StringValue { get; set; }
        public List<SubCompositeType> SubCompositeTypes
        {
            get;
            set;
        }
    }
    public class SubCompositeType
    {
        bool boolValue = true;
        string stringValue = "Hello ";
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }

客户端请求代码:

#region JosnPost
            CompositeType compositeType = new CompositeType
            {
                StringValue = "1",
                BoolValue = false
            };

            DataContractJsonSerializer dcSerializer = new DataContractJsonSerializer(typeof(CompositeType));

            MemoryStream stream = new MemoryStream();

            dcSerializer.WriteObject(stream, compositeType);

            string data = Encoding.UTF8.GetString(stream.ToArray(), 0, (int)stream.Length);

            //HttpClient client = new HttpClient();

            //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            string link = "http://localhost:1766/Service1.svc/CreateUser";

            //HttpResponseMessage respondse = await client.PostAsync(link, new StringContent(data));

            //string dataWithJason = await respondse.Content.ReadAsStringAsync();

            var request = (HttpWebRequest)WebRequest.Create(new Uri(link));
            request.ContentType = "application/json";
            request.Method = "POST";

            using (var requestStream = await request.GetRequestStreamAsync())
            {
                var writer = new StreamWriter(requestStream);
                writer.Write(data);
                writer.Flush();
            }

            using (var resp = await request.GetResponseAsync())
            {
                using (var responseStream = resp.GetResponseStream())
                {
                    var reader = new StreamReader(responseStream);
                    var result = reader.ReadToEnd();
                }
            }

服务端接口定义:

[OperationContract]
        [WebInvoke(
            UriTemplate = "CreateUser",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            Method = "POST")]
        string CreateUser(CompositeType compositeType);

服务端接口实现:

public string CreateUser(CompositeType compositeType)
        {
            return "OK" + compositeType.StringValue + " " + compositeType.BoolValue + " " + compositeType.SubCompositeTypes.FirstOrDefault().StringValue;
        }

由于服务端需要实现REST服务,需要在web.config里重新配置下(cover serviceModel就可以了):

<system.serviceModel>
    <services>
      <service behaviorConfiguration="MyServiceBehavior" name="Server.Service1">
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="web" contract="Server.IService1">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="max" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name ="web">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

经测试,在windows runtime项目中也可以用。

时间: 2024-10-29 14:10:42

一个用Json格式来发送一个Post请求到WCF服务的相关文章

X5 内核浏览器对json格式支持的一个小区别

var json1 = { "data": [{ "type": "pic", "filename": "P60107-124747.jpg", "data": {} }] }:和 var json2 = { data: [{ type: "pic", filename: "P60107-124747.jpg", data: {} }] }; 在大

响应json数据之发送ajax的请求

一.前端异步请求代码: <span style="font-size:14px;">$.ajax ({ type: "POST", //请求的方式 url: "outputservlet3", //请求url data: {}, //前端向后端传送的数据 dataType: "json", //数据格式json error: function () //请求错误的回调函数 { }, success: functio

ajax发送json格式数据

前后端在做数据交互的时候 一定一定要表明你所发的的数据到底是什么格式 前段后交互 你不能骗人家,不然后端开发人员来找你的时候会抄着一根凳子腿. 你的数据时什么格式 你就应该准确无误告诉别人是什么格式 那么怎么告诉后端你要发送的数据的格式是什么呢 form 表单是通过 他的 enctype 而 ajax 是通过 contentType,如果你要传送的数据是json(通常只有json格式) 你需要这么写 contentType:'application/json' 要怎样发送一个json格式的数据呢

HIVE json格式数据的处理

今天要处理一个以json格式存储的数据,想要直接把json的各个项的数据存入HIVE表中. HIVE直接读入json的函数有两个: (1)get_json_object(string json_string, string path) 返回值: string 说明:解析json的字符串json_string,返回path指定的内容.如果输入的json字符串无效,那么返回NULL. 举例: hive> select  get_json_object(‘{“store”:{“fruit”:\[{&quo

fastJson java后台转换json格式数据

什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等

解决fasterxml中string字符串转对象json格式错误问题

springboot中jackson使用的包是fasterxml的.可以通过如下代码,将一个形如json格式string转为一个java对象: com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper(); mapper.readValue(字符串, javabean.class); 但是,当我们要转的字符串是这种格式的就会报错,因为这种格式并不是规范的

Spark处理Json格式数据(Python)

前言 Spark能够自动推断出Json数据集的“数据模式”(Schema),并将它加载为一个SchemaRDD实例.这种“自动”的行为是通过下述两种方法实现的: jsonFile:从一个文件目录中加载数据,这个目录中的文件的每一行均为一个JSON字符串(如果JSON字符串“跨行”,则可能导致解析错误): jsonRDD:从一个已经存在的RDD中加载数据,这个RDD中的每一个元素均为一个JSON字符串: 这里我们仅讨论jsonFile的场景,jsonRDD处理方法类似. 典型示例 JSON的数据模

net core 模型绑定与之前版本的不同-FromBody 必须对应Json格式

原文:net core 模型绑定与之前版本的不同-FromBody 必须对应Json格式 之前有一个用于七牛上传图片的Callback Url的WebAPI (之前是用.net4.0,运行正常) 代码如下: // 七牛CallBack地址,CallbackBody内容name=upload/member/1.jpg&hash=Fn6qeQi4VDLQ347NiRm-RlQx_4O2 public object Post([FromBody]dynamic data) { ILog logger

JSON格式数据

1. 基础知识 1. 什么是JSON格式? JSON格式是现在网站数据交互的标准数据格式,写入标准. 取代原来的XML:符合JS原生语法,可以被直接解析,不需要额外的解析文件. 书写简单,一目了然 2. 合格的JSON数据 1.对象{...} 1)属性名必须是双引号的字符串:不能是Symbol类型:会被忽略 2)属性值不能是Date类型.函数.正则表达式.undefined.NaN.Infinity.-Infinity JSON.stringify(value)的作用是将值转化为JSON的字符串