1

Linux/Apache2 サーバーでホストしたい Silverlight で小さな Hello World テスト アプリを作成しました。データベース内のものにデータバインドできるように、データをMySQL(または他のLinux互換データベース)から取得したいと考えています。

MySQL Connector/.NETを使用して動作させることができました:

MySqlConnection conn = new MySqlConnection("Server=the.server.com;Database=theDb;User=myUser;Password=myPassword;");
conn.Open();
MySqlCommand command = new MySqlCommand("SELECT * FROM test;", conn);
using (MySqlDataReader reader = command.ExecuteReader())
{
     StringBuilder sb = new StringBuilder();
     while (reader.Read())
     {
         sb.AppendLine(reader.GetString("myColumn"));
     }
     this.txtResults.Text = sb.ToString();
}

公開された ClickOnce アプリに完全な信頼 (または少なくとも SocketPermission) を与えてローカルで実行すると、これは正常に機能します。

これをサーバー上で実行したいのですが、動作させることができず、常に許可例外が発生します (SocketPermission は許可されていません)。

それが違いを生む場合、データベースは Silverlight アプリと同じサーバーでホストされます。

編集 OK、クライアント アプリで db 資格情報を使用するのが悪い考えである理由がわかりました (明らかに)。その時、人々はどのようにこれを行うのですか?プロキシ Web サービスを保護して、クライアント/データベースとの間でデータを安全な方法でリレーするにはどうすればよいですか? ウェブ上に例はありますか?

確かに、Silverlight アプリケーションを強化するためにデータベースを使用したいと考えるのは私が最初ではないでしょうか?

4

6 に答える 6

5

「公式」の答えは、WCF を使用してサービスを Silverlight にプッシュすることですが、MySQL を使用している人はおそらく完全な ASP.NET ソリューションを使用していないと思います。私の解決策は、(Rob が提案したように) PHP Web サービスを構築して、MySQL データベースと対話し、Silverlight が RESTful な方法でデータベースにアクセスできるようにすることでした。

これは、Silverlight を使用して PHP Web サービスを介して MySQL データベースにアクセスするための 3 部構成のチュートリアルの始まりです。

PHP、MySQL、および Silverlight: 完全なチュートリアル

于 2010-06-01T14:33:21.800 に答える
4

やりたいことを行う最も簡単な方法は (今編集内容を読んだので :))、消費できるサービスを公開することです。Microsoft が現在本当に推進しているパターンは、WCF サービスを公開することですが、実際には、Silverlight クライアントは WCF を使用してさまざまな種類のサービスを利用できます。

現時点で最も簡単なのは、Web サーバーで .NET サービスを使用するか、PHP REST サービスを使用して、Silverlight アプリをそのサービスに向けることです。そうすることで、データベースを覗き見する人からデータベースを保護するだけでなく、さらに重要なことに、データベースに対して他の人ができることを制限できます。データが読み取り専用であることが想定されていて、サービスの契約で読み取り操作のみが許可されている場合は、準備ができています。または、サービスが資格情報を使用してセッションをネゴシエートすることもできます。これも、WCF を介して設定されます。

WCF は、クライアントのみ、サーバーのみ、またはクライアント サーバー コネクタ プラットフォームにすることができます。何を選択するかは、作成するコードに影響しますが、すべてデータベースから独立しています。コードは、データベース テーブルへの 1 対 1 のマッピングになるように構造化することも、はるかに抽象化することもできます (必要に応じて、完全な論理ビューを表すクラスを設定できます)。

于 2008-11-04T18:26:40.037 に答える
3

これが機能するようになりました。Linux Ubuntu 10 / Apache2 サーバー上の Silverlight4 コンテンツを含む ASP.NET4 サイト。コンテンツは Visual Studio 2010 を使用して開発されています。VS2008 も正常に動作するはずです。

サーバ:

  • Apache2 と MySQL で Linux サーバーをセットアップします。これに関するガイドはたくさんあります。
    • MySQL が開発用 PC からアクセス可能であり、必要に応じてインターネットからもアクセスできることを確認してください。詳細については、こちらを参照してください:アクセス拒否エラーの原因.
    • データベース テーブル構造をセットアップし、後でテストするためにいくつかのコンテンツを追加します。この例では、列「name」を持つテーブル「persons」があると想定しています。
  • Silverlight はクライアント側のテクノロジであるため、簡単に使用でき、単純な HTML ページでアプリケーションをホストできます。
  • Silverlight と MySQL の間に Web サービスが必要です。Microsoft の WCF RIA は 1 つのフレーバーですが、.NET が必要です。プラス面として、ASP.NET4 ページもホストできます。これをセットアップするための完全なガイドは次のとおりです。MySqlメンバーシップを使用したUbuntuでAsp.Net 4.0およびMVC2を使用してMono 2.8をセットアップする

ビジュアルスタジオ:

  • 最新のMySQL Connector/Netをインストールし、VS を再起動します
  • MySQL データベースをデータ ソースとして追加する
    • サーバー エクスプローラーを開く -> データ接続の追加 -> [MySQL データベース] を選択します。
    • 資格情報を入力して接続をテストする

MySQL アクセスを使用してサイトをセットアップする:

ここに役立つガイドがあります:WCF RIA対応SL4アプリケーションへのステップバイステップガイドとエンティティフレームワーク

  • Silverlight プロジェクトを作成または開きます。
    • サーバー側プロジェクトの名前は通常、'ProjectName.Web' です。
    • クライアント側のプロジェクトは、通常、'ProjectName' という名前です。
  • 「ADO.NET Entity Data Model」をサーバー プロジェクトに追加します。これがデータベース構造のモデルになります。
    • 「データベースから生成」を選択
    • 作成した MySQL データベース接続を選択します
    • アクセスするテーブルを選択します
  • 続行する前に、今すぐソリューションを構築してください。
  • 「ドメイン サービス クラス」をサーバー プロジェクトに追加します。「フードドメイン」。これにより、クライアント側の Silverlight コードでデータベース エンティティを使用できるようになります。
    • [使用可能な DataContext/ObjectContext クラス:] で、前の手順で作成した Entity Framework モデルを選択します。
    • アクセスしたいエンティティをチェックし、必要に応じて「編集を有効にする」をチェックします
    • 「メタデータに関連付けられたクラスを生成する」にチェックを入れます
  • サーバー プロジェクトの「FooDomain」に基づいて、ソリューションを再度ビルドして「FooDomainContext」を生成します。

テスト:

MySQL から Silverlight にデータを取得しましょう。列名が「name」の「persons」という名前のテーブルがあると仮定すると、リスト ボックスをバインドして人物の名前を表示できます。

まず、Silverlight ページを追加します。「ホーム」としましょう。Home.xaml に次を追加します。

<ListBox x:Name="TestList" Width="100" />

Home.xaml.cs ファイルに次を追加します。

public partial class Home : Page
{
    public Home()
    {
        InitializeComponent();

        Loaded += Home_Loaded;
    }

    void Home_Loaded(object sender, RoutedEventArgs e)
    {
        var context = new FooDomainContext();
        var query = context.Load(context.GetPersonsQuery());
        TestList.ItemsSource = query.Entities;
        TestList.DisplayMemberPath = "name";
    }
}

ここでは、ドメイン サービスに「FooDomain」という名前を付けたと仮定します。これにより、使用される「FooDomainContext」クラスが生成されます。

すべてが適切に設定されていれば、Silverlight プロジェクトの実行時に人物名のリストが表示されるはずです。

編集: ASP.NET はオプションではありませんが、私の例で使用されている WCF RIA Web サービスには必須です。

于 2011-03-28T18:07:52.010 に答える
3

Silverlight には、データベース サーバーに直接アクセスする機能はありません。できることは、Web サービス (ASMX または WCF、.NET 以外でも!) を介してデータベース操作を公開し、Silverlight を使用してそれらのサービスにアクセスすることです。

于 2008-09-19T07:38:08.677 に答える
2

クライアント側からサーバーに直接 DB 接続することは、通常はお勧めできません。Silverlight アプリを逆コンパイルするのがどれほど簡単かはわかりませんが、何らかの方法で可能だと思います。次に、基本的に DB 資格情報をユーザーに提供します。

于 2008-09-19T08:09:29.320 に答える