[英]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.SerializeObject , DataContractJsonSerializer或您选择的任何其他库来序列化为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.