【问题标题】:Pass a jsonstring to the service and convert it to stream on the server side将 jsonstring 传递给服务并将其转换为服务器端的流
【发布时间】:2012-03-07 08:19:18
【问题描述】:

我有这个

{"invoices":{"POSWorkstationID":"POS7","POSClerkID":"admin","CustomerName":"爱丽丝梦游仙境","IsFreightOverwrite":true},"invoiceDetails":[{" ItemDescription":"旧世界灯柱","QuantityOrdered":"1","SalePriceRate":"$107.99","ExtPriceRate":"107.99","ItemType":"Stock","LineNum":1,"WarehouseCode" :"主要"}]}

现在我想使用 rest 在我的服务器上传递它并将其转换为流。我的服务代码在这里。 https://stackoverflow.com/questions/9594382/convert-json-to-stream-in-wcf

【问题讨论】:

  • 您想将其作为流发送的任何具体原因?您也可以发布发票数据合同

标签: json wcf stream


【解决方案1】:

请找到一些示例代码以使您的方案正常工作:

在我的服务器上:

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
        public string CreateInvoice(Stream xmlStream)
        {
            byte[] buffer = new byte[WebOperationContext.Current.IncomingRequest.ContentLength];
            int read = -1;
            while (read != 0)
            {
                read = xmlStream.Read(buffer, 0, buffer.Length);
            }           
            System.Text.Encoding enc = System.Text.Encoding.ASCII;
            string jsonobjectstring = enc.GetString(buffer);
            JavaScriptSerializer json = new JavaScriptSerializer();
            object jsonobject = json.DeserializeObject(jsonobjectstring);
            return "Recieved the json text on server";
           //MaintainInvoice(xmlStream, InvoiceMaintainance.CreateInvoice);
        }

我已经修改了服务器方法逻辑,以便我可以对其进行测试。在服务器上获取流后,您可以使用您的逻辑根据需要返回发票对象。

现在在客户端调用其余服务,我使用以下代码:

private string UseHttpWebApproachByteArray(string serviceUrl, string resourceUrl, string method, byte[] requestBody)
        {
            string responseMessage = null;            
            var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest;
            if (request != null)
            {                
                request.ContentType = "application/octet-stream";
                request.Method = method;
            }            
            if (method == "POST" && requestBody != null)
            {                
                request.ContentLength = requestBody.Length;
                using (Stream postStream = request.GetRequestStream())                    
                    postStream.Write(requestBody, 0, requestBody.Length);
            }

            if (request != null)
            {
                var response = request.GetResponse() as HttpWebResponse;
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    Stream responseStream = response.GetResponseStream();
                    if (responseStream != null)
                    {
                        var reader = new StreamReader(responseStream);

                        responseMessage = reader.ReadToEnd();
                    }
                }
                else
                {
                    responseMessage = response.StatusDescription;
                }
            }
            return responseMessage;
        }

private void Test()
{
      string jsonText = "{\"invoices\":{\"POSWorkstationID\":\"POS7\",\"POSClerkID\":\"admin\",\"CustomerName\":\"Alice in Wonderland Tours\",\"IsFreightOverwrite\":true},\"invoiceDetails\":[{\"ItemDescription\":\"Old World Lamppost\",\"QuantityOrdered\":\"1\",\"SalePriceRate\":\" $107.99\",\"ExtPriceRate\":\"107.99\",\"ItemType\":\"Stock\",\"LineNum\":1,\"WarehouseCode\":\"Main\"}]}";
      System.Text.Encoding enc = System.Text.Encoding.ASCII;
      byte[] jsonBytes = enc.GetBytes(jsonText);
      UseHttpWebApproachByteArray(serviceBaseUrl, resourceUrl, method, jsonBytes);
}

【讨论】:

  • 嗨,我想补充一下,如果我将使用 jquery 和 ajax 访问它,我将如何在客户端执行它?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
相关资源
最近更新 更多