2012-07-19 47 views
3

我已經花了幾天的時間思考如何處理新的需求。WebService ASP.NET MVC 3發送和接收

我有兩個網站。第一個讓用戶填寫一個應用程序。第二個網站是用於管理用戶應用程序的內部網站。我需要開發一個「網絡服務」,將網站1的應用程序數據發送到網站2,並返回成功或失敗的網站2的響應。我從來沒有做過一個Web服務,我有點困惑,從哪裏開始。我一直在網上閱讀各種示例,但它們似乎只是構建web服務的起點......沒有具體的例子。

因此,對於發佈數據網站1,我的控制器方法是什麼樣子?我是否使用Json將數據發佈到網站2?這將是什麼樣的例子?在指向網站2的方法中是否存在某種形式的重定向?

因此,將回復發布回網站2該控制器方法會是什麼樣子?我假設我會再次使用Json將響應發送回網站1?在方法中是否有某種形式的重定向指向網站1?

回答

0

對於數據&操作,您顯然擁有多個客戶端。所以服務就是你要找的。

ASP.NET MVC是開發RESTful服務的不錯選擇。如果您(和您的經理)已準備好使用測試版,請使用Checkout ASP.NET-Web API。

如果你想留在一個穩定的產品,去爲MVC3。您可能需要編寫一些自定義代碼來返回XML和JSON數據以服務於不同類型的客戶端。那裏有一些tutorials

因此,創建一個服務(ASP.NET MVC/WCF服務)。然後,您可以創建2個客戶端應用程序,一個用於外部客戶端,另一個用於內部用戶。這兩個應用程序都可以調用服務中的方法來創建/讀取用戶帳戶/或任何您想要執行的操作。

爲了讓應用程序更具互動性和生動性,您可以考慮包括一個名爲SiganalRwonderful thing,它可以幫助您獲得一些實時數據,而無需每隔n秒連續輪詢數據庫/中間層!

1

我會使用JSON並將應用程序POST到Web服務。

首先,我假設應用程序數據包含在某種類型的對象中。使用JSON.Net將對象序列化爲JSON。它看起來像下面的代碼。

var application = new Application(); 
string serializedApplication = JsonConvert.Serialize(application); 

其次是POST代碼你的端點(webservice,mvc action)。爲此,您需要向端點發出HTTPRequest。以下代碼是我用於POST代碼的代碼。

public bool Post(string url, string body) 
    { 
     //Make the post 
     ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true; 

     var bytes = Encoding.Default.GetBytes(body); 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     Stream stream = null; 
     try 
     { 
      request.KeepAlive = false; 
      request.ContentLength = bytes.Length; 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.Timeout = -1; 
      request.Method = "POST"; 
      stream = request.GetRequestStream(); 
      stream.Write(bytes, 0, bytes.Length); 

     } 
     finally 
     { 
      if (stream != null) 
      { 
       stream.Flush(); 
       stream.Close(); 
      } 
     } 

     bool success = GetResponse(request); 

     return success; 
    } 

    public bool GetResponse(HttpWebRequest request) 
    { 
     bool success; 

     using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
     { 

      using (Stream responseStream = response.GetResponseStream()) 
      { 
       if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Created) 
       { 
        throw new HttpException((int)response.StatusCode, response.StatusDescription); 
       } 

       var end = string.Empty; 
       using (StreamReader reader = new StreamReader(responseStream)) 
       { 
        end = reader.ReadToEnd(); 
        reader.Close(); 

        success = JsonConvert.DeserializeObject<bool>(end); 
       } 

       response.Close(); 
      } 
     } 

     return success; 
    } 

因此,現在您可以將JSON POST POST到端點並接收響應,下一步是創建端點。下面的代碼將使您開始使用mvc中的端點來接收應用程序並對其進行處理。

[HttpPost] 
    public ActionResult SubmitApplication() 
    { 
     //Retrieve the POSTed payload 
     string body; 
     using (StreamReader reader = new StreamReader(Request.InputStream)) 
     { 
      body = reader.ReadToEnd(); 
      reader.Close(); 
     } 

     var application = JsonConvert.Deserialize<Application>(body); 

     //Save the application 
     bool success = SaveApplication(application); 

     //Send the server a response of success or failure. 
     return Json(success); 
    } 

上述代碼是一個好的開始。請注意,我還沒有測試這個代碼。

+0

非常感謝您的回覆,這是一個很好的開始。我試圖執行代碼。但是,在您的GetResponse方法中,傳入參數(HttpRequest請求)不包含GetResponse方法。那會是HttpWebRequest類嗎?但是如果我在使用(Stream responseStream = response.GetResponseStream())之後將其更改爲HttpWebRequest,那麼if語句將無法完成代碼,System.Net.WebResponse不包含狀態碼的定義。 – 2012-07-20 14:29:03

+0

我已經更新了代碼。 Request.GetResponse需要轉換爲HttpWebResponse。 '使用(HttpWebResponse響應=(HttpWebResponse)request.GetResponse())' – 2012-07-20 17:02:06

+0

非常感謝查克!第一對測試似乎沒有問題。 – 2012-07-20 18:04:59