[UWP] - 用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項目中也可以用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM