2011-12-26 8 views
0

WCFサービスを使用してASP.NET MVCアプリケーションを開発しています。問題は、アプリを会社の標準セキュリティモデルと統合する必要があることです。WCFサービスを使用するユーザーあたりの接続文字列

このモデルは、アプリケーション・ユーザーごとに異なるデータベース・ユーザーとパスワード(接続文字列)を使用して、ユーザーが認証されると、データベースに接続するすべてのWebサービスを使用しなければならないとき、この接続文字列が提供されています。

私たちは、WCFサービスには、この接続文字列を渡すための最良の方法は何かを考え出すされています。私のチームの誰かがこの接続をセッションに保存し、すべてのメッセージでサービスに送信することを提案します。おそらく、この接続を自動的に渡すためにいくつかのWCF拡張性を使用します。

もう1つの提案はありますか?

+0

どのような認証方式を使用していますか? –

+0

フォーム認証とユーザーを検証するWCFサービスで、このサービスは固定データベースの使用を唯一使用します。 – Snahider

+0

解決策を実装できますか? –

答えて

0

私は周りのセッションデータを渡すためにカスタムSOAPヘッダーを使用しました。このアプローチは、当社の生産環境で非常に成功しています。それはかなり簡単です。

+0

このアプローチを実装しました。私たちはセッションデータ(ユーザとパスワード)を渡すためにEndpointBehaviourを使いました。 – Snahider

+0

別の成功事例を聞いてうれしいです。さらに、インスタンス・コンテキスト・モードに応じて、その情報を拡張子を介してInstanceContextに入れることもできます。次に、あなたは、いくつかのラッパーコードを書くことができます: 'var principle = SnahiderSession.Principle;'あなたのサービス操作からまっすぐに。 – Newbie

0

あなたは、セッション内のすべてのサービスコールで1時間作成した接続インスタンスを共有し、作業が完了したときにDisposeConnection()メソッドを呼び出して、接続を配置することができますWCFサービスにInstanceContextMode.PerSessionを使用することができます。

これがあなたを手伝ってくれることを願っています!

例:あなたは現在

[ServiceContract] 
public interface IConnectionService 
{ 
    [OperationContract] 
    void InitSqlConnection(string UserName, string passWord); 

    [OperationContract] 
    void DisposeSqlConnection(); 

    [OperationContract] 
    string GetUserAccounts(); 

    [OperationContract] 
    string GetUserRoles(); 

} 

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
public class ConnectionService : IConnectionService 
    { 

     SqlConnection connection; 

     public void InitSqlConnection(string UserName, string passWord) 
     { 
      if (connection == default(SqlConnection)) 
      { 
       connection = new SqlConnection(string.Format("Data Source=.;Initial Catalog=WADB;User Id={0};Password={1};", UserName, passWord)); 
       connection.Open(); 
      } 
     } 

     public void DisposeSqlConnection() 
     { 
      if (connection != default(SqlConnection)) 
      { 
       connection.Close(); 
       connection.Dispose(); 
      } 
     } 

     public string GetUserAccounts() 
     { 
      string data = string.Empty; 
      if (connection != default(SqlConnection)) 
      { 
       //// do database operation with "connection" 
       SqlDataAdapter da = new SqlDataAdapter("select * from tblUserAccount", connection); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 
       data = ds.GetXml(); 
      } 
      return data; 
     } 

     public string GetUserRoles() 
     { 
      string data = string.Empty; 
      if (connection != default(SqlConnection)) 
      { 
       //// do database operation with "connection" 
       SqlDataAdapter da = new SqlDataAdapter("select * from tblUserRole", connection); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 
       data = ds.GetXml(); 
      } 
      return data; 
     } 
} 
関連する問題