2009-04-25 16 views
1

現在、私はasp.net mvcの小さなアプリケーションに取り組んでいます。これはある種のローカリゼーションツールです。クライアントはアプリケーションにログインし、使用しているアプリケーションで表示される用語を翻訳できます。アプリケーション は2からそのアプリケーション(例えば、「カタログ」アプリを起動しasp.net mvc?

  • 「カタログ」に

    1. ログイン検索
    2. ローカライズサイトへとボタンの例のタイトルのために特定の用語を翻訳:それはこのように起こるさ。)とトラフWebサービスは、翻訳されたこれらの用語でローカルデータベースを更新します。

    これは私たちの古いソリューションであり、うまくいきます。 しかし、私はasp.net mvcで翻訳ツールアプリケーションのリファクタリングを行っています。なぜ私たちはmvcとWebサービスで別々のロジック(倍増)を持っているのでしょうか?なぜ私はmvcをWebサービスとして使うことができないのですか...このように私はロジックを1つしか持っていないので(要素を取得して更新する)、wcf Webサービスなどを作成する必要はありません。そして、最も重要なのは、私はこのロジックを持っているdllに依存するメッシュデスクトップアプリケーションを持っていないということです。

    今質問です。ビューとJsonResultsを除いて、mvcのコントローラから取得できるもの...オブジェクトのコレクションを直接取得できますか?

    以上のプレーンな質問、どのように私はasp.net mvcをWebサービスとして使用することができます。あなたの経験は何ですか?

    歓声 マルコ

  • 答えて

    2

    それは本当にあなたのニーズによって異なります。 ASP.NET MVCアプリケーションをデータサービスとして使用するのは最も確実ですが、共有コードを共通ライブラリに書き留めて、両方のアプリケーションでそのライブラリを参照する必要があるように思えます。純粋にコントローラアクションとしてより難しいWebサービスプロジェクトが提供するものがいくつかあります。 (デシリアライゼーション、wsdlなど)

    +0

    ありがとうございます。実際には、すべてのアプリケーションはデータレイヤーと同じWebアプリケーションでも使用できます...そして、最も良いことは、そのDLLにすべてのデータレイヤーアクションがあることです他の側のサービスとしてmvcを呼び出すことは、そのmvcアプリケーションで使用するのと同じコードを使用します:)これは美しいものではありませんか? :) 歓声 – Marko

    1

    本当にあなたのWebサービスを消費するかによって異なります。

    例:jQueryは、アクションから複雑なオブジェクト(コレクション、配列、ネストされたオブジェクトなど)を返し、jQueryでクライアントブラウザで使用するためにjavascriptオブジェクトにデシリアライズすることができるため、JsonResultsをよく使用します。もちろん、シリアライゼーションプロセスで型の安全性が失われていますが、これはほとんどのREST/SOAPベースのWebサービスではかなり期待されています。あなたが本当に消費アプリケーションの型安全性を必要とする場合は、WCF(またはそれに類するもの)を貼ってください。

    私はJsonとしてアクションを返すフラグを作成しています。私はいくつかのサイトがこのようにしていることに気づいた。このアクションがあるとします:

    public ActionResult GetPeople() 
        { 
         IList<Person> result = svc.GetPeople(); 
    
         return View(result); 
        } 
    

    ..このアクションの結果は、通常、いくつかのビューにレンダリングされます。それは素晴らしいことだが、あなたはWebサービスとしてアクションを使用したい場合は、単にこれにそれを変更することができます:

    public ActionResult GetPeople(string ajax) 
        { 
         IList<Person> result = svc.GetPeople(); 
    
         if (Convert.ToBoolean(ajax)) 
          return Json(result); 
         else 
          return View(result); 
        } 
    

    ..soあなたの消費アプリはシリアル化されたJSONを気にdidntのならば、代わりにGETリクエストを呼び出しますこのhttp://domain.com/controller/GetPeopleのように(ブラウザーがビューを取得するため)、http://domain.com/controller/GetPeople?ajax=trueのようなajaxフラグを追加するだけで、Jsonを返すことができます。より適切なフラグは、 'ajax'の代わりに 'json'である可能性があります。このメソッドは、オプションでajaxで呼び出すことができるアクションの下位レベルのブラウザをサポートするために使用されます。

    私はしばらくの私のmvcアプリケーションにこれを追加する考えていたが、私はこのフラグですべてのアクションを修正し、より多くのifステートメントを追加するというアイデアが好きではありません。私の考えは、この機能を必要とするアクションをデコレートするカスタム属性を作成し、その属性が動的に余分なフラグを追加し、最初に指定されたものではなくJsonとして条件付きでモデルデータを返します。試してごらん。