2016-10-13 16 views
0

私はオブジェクトをアプリケーションに送り、そこから同じオブジェクトを受け取りたいと思います。私は2つのアプリケーションの間でメッセージクラスを送信し、受信したいと思う。webrequest経由でオブジェクトを送信し、Webサービスで受信

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; 
    } 
} 

メッセージクラスserilizeとサーバーに送信が、サーバにそれがnullである:

[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; 
     } 
    } 

、ここでは私のサーバーのコードは次のとおりです。ここで私のクライアントコードはありますか?

+2

バイナリ形式で投稿しています。代わりにJSONでメッセージをシリアライズして投稿する –

+0

サンプルを紹介してもらえますか? – behzad

答えて

2

要求本体をバイナリ形式でエンコードしていますが、これは直接デシリアライズされません。 ASP.NET MVCでデシリアライズされるJSON形式のリクエストボディを送信する方がよいでしょう。

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(); 
    } 
} 
+0

tanks adnan、今、どのように応答(ファイル)を表示できますか?私はこれを持っている:公開メッセージPOST(メッセージメッセージ){..} – behzad

+0

私はMyMessageClassを表示このコードで:JsonConvert.DeserializeObject (結果); – behzad

関連する問題