繁体   English   中英

通过webrequest发送对象并在Web服务中接收

[英]send object via webrequest and receive in web service

我想将对象发送到应用程序并从中接收相同的对象。 我想在2个应用程序之间发送和接收消息类。 这是我的客户代码:

[Serializable]
    public struct Messages
    {
        public string ErrorCode { get; set; }

        public string ErrorMessage { get; set; }

        public MessageType? messageType { get; set; }

        public SendMessageType? sendMessageType { get; set; }

        public string UserCode { get; set; }

        public DateTime MessageDateTime { get; set; }

        public MethodName methodName { get; set; }

        public int? FieldsCount { get; set; }

        public List<KeyValue> Values { get; set; }
    }

    public struct KeyValue
    {
        public string key { get; set; }

        public string value { get; set; }
    }

    public enum MessageType
    {
        Request,
        Reply,
        Reject
    }

    public enum MethodName
    {
        FindShebaFromDeposit = 1,
        BalanceInquery = 2,
        CheckBill = 3,
        BillPayment = 4,
        GetDepositList = 5,
        NormalTransfer = 6,
        GetPersonInfoFromDeposit = 7
    }

    public enum SendMessageType
    {
        way2,
        way3
    }

    public void POST(Messages messages)
    {
        //Serialize the object into stream before sending it to the remote server
        MemoryStream memmoryStream = new MemoryStream();
        BinaryFormatter binayformator = new BinaryFormatter();
        binayformator.Serialize(memmoryStream, messages);

        //Cretae a web request where object would be sent
        WebRequest objWebRequest = WebRequest.Create("http://localhost:13060/Default/Index");
        objWebRequest.Method = "POST";
        objWebRequest.ContentLength = memmoryStream.Length;
        // Create a request stream which holds request data
        Stream reqStream = objWebRequest.GetRequestStream();
        //Write the memory stream data into stream object before send it.
        byte[] buffer = new byte[memmoryStream.Length];
        int count = memmoryStream.Read(buffer, 0, buffer.Length);
        reqStream.Write(buffer, 0, buffer.Length);

        //Send a request and wait for response.
        try
        {
            WebResponse objResponse = objWebRequest.GetResponse();
            //Get a stream from the response.
            Stream streamdata = objResponse.GetResponseStream();
            //read the response using streamreader class as stream is read by reader class.
            StreamReader strReader = new StreamReader(streamdata);
            string responseData = strReader.ReadToEnd();
        }
        catch (WebException ex)
        {
            throw ex;
        }
    }

这是我的服务器代码:

public class DefaultController : Controller
{
    // GET: Default
    [HttpPost]
    public Bussiness.Message.CoreMessage Index(Bussiness.Message.CoreMessage coreMessage)
    {
        Puller.Bussiness.ServiceMessages serviceMessage = new Bussiness.ServiceMessages();
        var file = serviceMessage.CreateRequest(coreMessage);
        return file;
    }
}

消息类序列化并发送到服务器,但在服务器中为null?

您正在以二进制格式对请求正文进行编码,而不会直接对其进行反序列化。 更好的方法是以JSON格式发送请求正文,默认情况下,ASP.NET MVC将对请求正文进行反序列化。

要序列化为JSON,可以使用多种选项。 我正在使用JavaScriptSerializer.Serialize

或者,您可以使用JsonConvert.SerializeObjectDataContractJsonSerializer或您选择的任何其他库来序列化为json。

public void POST(Messages messages)
{
    var request = (HttpWebRequest)WebRequest.Create("http://localhost:13060/Default/Index");
    request.ContentType = "application/json";
    request.Method = "POST";

    using (var streamWriter = new StreamWriter(request.GetRequestStream()))
    {
        string json = new JavaScriptSerializer().Serialize(messages);
        streamWriter.Write(json);
    }

    var response = (HttpWebResponse)request.GetResponse();
    using (var streamReader = new StreamReader(response.GetResponseStream()))
    {
        var result = streamReader.ReadToEnd();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM