3

私は、新しい要件にどのようにアプローチするかについて、数日間頭を悩ませてきました。

私は2つのウェブサイトを持っています。最初のものは、ユーザーがアプリケーションに記入できるようにします。2 番目の Web サイトは、ユーザー アプリケーションを管理するために使用する内部 Web サイトです。Web サイト 1 から Web サイト 2 にアプリケーション データを送信し、Web サイト 2 に成功または失敗の応答を返す "Web サービス" を開発する必要があります。これまで Web サービスを行ったことがなく、どこから始めればよいか少し混乱しています。私はオンラインでさまざまな例を読んできましたが、それらはすべて Web サービスを構築するための出発点にすぎないようです...具体的な例はありません。

データ Web サイト 1 を投稿する場合、コントローラー メソッドはどのようになりますか? Json を使用してデータを Web サイト 2 に投稿しますか? その例はどのように見えますか?Web サイト 2 を指すメソッドに何らかの形式のリダイレクトはありますか?

応答を Web サイト 2 に戻す場合、そのコントローラー メソッドはどのようになりますか? Json を再度使用して、応答を Web サイト 1 に送り返すと思いますか? Web サイト 1 を指すメソッドに何らかの形式のリダイレクトはありますか?

4

2 に答える 2

1

JSON を使用して、アプリケーションを Web サービスに POST します。

まず、アプリケーション データが何らかのタイプのオブジェクトに含まれていると仮定します。JSON.Netを使用して、オブジェクトを JSON にシリアル化します。次のコードのようになります。

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

2 つ目は、コードをエンドポイント (webservice、mvc アクション) に POST することです。これには、エンドポイントに対して 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 し、応答を受け取ることができるようになりました。次のステップは、エンドポイントを作成することです。次のコードは、アプリケーションを受信して​​処理する 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 サービスの開発に適しています。あなた (およびマネージャー) がベータ版を使用する準備ができている場合は、ASP.NET-Web API を確認してください。

安定した製品を使い続けたい場合は、MVC3 をお勧めします。XML と JSON でデータをサーバーのさまざまな種類のクライアントに返すカスタム コードを作成する必要がある場合があります。そこにはいくつかのチュートリアルがあります。

したがって、サービス (ASP.NET MVC / WCF サービス) を作成します。次に、外部クライアント用と内部ユーザー用の 2 つのクライアント アプリを作成できます。このアプリは両方とも、サービス内のメソッドを呼び出して、ユーザー アカウントを作成/読み取り/または実行したい操作を行うことができます。

アプリをよりインタラクティブで活気のあるものにするために、 SiganalRと呼ばれる素晴らしいものを含めることを検討してください。これにより、データベース/中間層を n 秒ごとに継続的にポーリングすることなくリアルタイム データを取得できます。

于 2012-07-19T20:17:09.527 に答える