WebService ASP.NET MVC 3发送和接收

时间:2012-07-19 20:06:12

标签: asp.net-mvc-3 web-services

关于如何处理新要求,我现在已经绞尽脑汁待了几天。

我有两个网站。第一个允许用户填写应用程序。第二个网站是用于管理用户应用程序的内部网站。我需要开发一个“Web服务”,将应用程序数据从网站1发送到网站2,并向网站2返回成功或失败的响应。我以前从未做过网络服务,而且我对从哪里开始感到困惑。我一直在网上阅读各种例子,但它们似乎只是构建网络服务的起点......没有具体的例子。

因此,对于发布数据网站1,我的控制器方法会是什么样子?我是否使用Json将数据发布到网站2?那会是什么样的例子?在指向网站2的方法中是否存在某种形式的重定向?

因此,要将回复发布回网站2,那控制器方法会是什么样子?我想我会再次使用Json将回复发送回网站1?在指向网站1的方法中是否存在某种形式的重定向?

2 个答案:

答案 0 :(得分: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;
    }

现在您可以将POST JSON发送到端点并接收响应,下一步是创建端点。以下代码将帮助您开始使用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);
    }

以上代码是一个良好的开端。请注意,我尚未测试此代码。

答案 1 :(得分:0)

您显然有多个客户端用于数据和操作。所以服务就是你要找的。

ASP.NET MVC是开发RESTful服务的理想选择。如果您(和您的经理)准备使用测试版,那么Checkout ASP.NET-Web API。

如果您想使用稳定的产品,请转到MVC3。您可能需要编写一些自定义代码来将XML中的数据以及JSON返回给服务器不同类型的客户端。那里有一些tutorials

因此,创建一个服务(ASP.NET MVC / WCF服务)。然后,您可以创建2个客户端应用程序,一个用于外部客户端,另一个用于内部用户。这两个应用程序都可以调用服务中的方法来创建/读取用户帐户/或您想要执行的任何操作。

为了使应用程序更具交互性和生动性,您可以考虑使用名为wonderful thingSiganalR,它可以帮助您获得一些实时数据,而无需在每个数据库/中间层中连续轮询n秒!