• [UWP]


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

    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项目中也可以用。

  • 相关阅读:
    Volley学习(RequestQueue分析)
    Volley学习(Volly分析)
    AsyncTask学习
    如何排放表单标签介绍的位置?
    了解hr标签的各种浏览器兼容问题
    多屏移动端网站开发需要注意的十大技巧
    让吃货垂涎三尺的美食酷站!—— 每周酷站欣赏 #1
    12个响应式导航菜单jQuery插件,让您轻松应对响应式网站!
    网页设计师必看!27个响应式的简约风格网站
    网页设计师必看!12个漂亮颜色搭配的国外网站欣赏
  • 原文地址:https://www.cnblogs.com/fred-bao/p/4558591.html
Copyright © 2020-2023  润新知