3

几天来,我一直在绞尽脑汁思考如何处理新的需求。

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

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

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

4

2 回答 2

1

我会使用 JSON 并将应用程序发布到 Web 服务。

首先,我假设应用程序数据包含在某种类型的对象中。使用JSON.Net将对象序列化为 JSON。它看起来像下面的代码。

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

其次是发布您的端点的代码(webservice,mvc 操作)。为此,您需要向端点发出 HTTPRequest。以下代码是我用来发布代码的代码。

    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 到端点并接收响应,下一步是创建端点。以下代码将让您开始使用 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);
    }

上面的代码是一个好的开始。请注意,我没有测试过这段代码。

于 2012-07-19T20:46:38.313 回答
0

您显然有不止一个客户负责数据和操作。因此,您正在寻找服务。

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

如果您想保持稳定的产品,请选择 MVC3。您可能需要编写一些自定义代码以将 XML 和 JSON 格式的数据返回到服务器不同类型的客户端。那里有一些教程

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

为了使应用程序更具交互性和生动性,您可以考虑添加一个名为SiganalR的奇妙东西,它可以帮助您获取一些实时数据,而无需每隔 n 秒就不断地轮询数据库/中间层!

于 2012-07-19T20:17:09.527 回答