2012-07-19 46 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