2012-03-06 14 views
1

私はWFサービスを保護するだけです。これに関するリソースが見つかりません。どうやってするの?WorkflowService認証を設定するにはどうすればよいですか?

はすでに試してみました:

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (WorkflowServiceHost host = new WorkflowServiceHost(new Workflow1(), new Uri("http://localhost/Test"))) 
     { 
      host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = System.ServiceModel.Security.UserNamePasswordValidationMode.Custom; 
      host.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new Test(); 

      host.Open(); 
      Console.Write("ready"); 
      Console.ReadLine(); 
     } 
    } 
} 
public class Test : UserNamePasswordValidator 
{ 
    public Test() 
    { 
     Console.Write("hit"); 
    } 

    public override void Validate(string userName, string password) 
    { 
     Console.Write("never hit"); 
    } 
} 

と設定

<bindings> 
    <wsHttpBinding> 
    <binding> 
     <security mode="Message"> 
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

    <serviceBehaviors> 
    <behavior> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
     <!--<serviceCredentials> 
     <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="myAssembly.Test, myAssembly" /> 
     </serviceCredentials>--> 
    </behavior> 
    </serviceBehaviors> 
  • それらが動的に
  • が作成されるため、固定の名前のエンドポイントを作成できません

UPDATE - I以下の設定を試してみました働いていたが、私はよりきめ細かな方法は、限り、これはちょうどWCFは、あなたがWCFで何かできることは、ここに動作するはずされたメッセージング一環として、各サービスの利用

<protocolMapping> 
    <add scheme="http" binding="wsHttpBinding"/> 
</protocolMapping> 

答えて

0

少しハッキリですが、動作します。不明な契約名を取得し、それぞれのサービスエンドポイントを追加するためにWorkflowServiceHostをオーバーライドしました。

const string DEFAULT_WORKFLOW_SERVICE_BINDING_NAME = "WorkflowDefaultBinding"; 

    static void Main(string[] args) 
    {    
     MyWorkflowServiceHost host = new MyWorkflowServiceHost(new CountingWorkflow2(), new Uri(hostBaseAddress)); 
     foreach (var contractName in host.ImplementedContractsNames) 
     { 
      // now I'm able to choose which binding to use depending on a condition 
      var binding = new WSHttpBinding(DEFAULT_WORKFLOW_SERVICE_BINDING_NAME); 

      host.AddServiceEndpoint(contractName, binding, string.Empty); 
     } 
    } 

そしてMyWorkflowServiceHost

public class MyWorkflowServiceHost : WorkflowServiceHost 
    { 
     public MyWorkflowServiceHost(Activity activity, params Uri[] baseAddresses) 
      : base(activity, baseAddresses) 
     { 

     } 

     private IDictionary<string, System.ServiceModel.Description.ContractDescription> _implementedContracts; 
     public IEnumerable<string> ImplementedContractsNames 
     { 
      get 
      { 
       foreach (var contract in _implementedContracts) 
        yield return contract.Key; 
      } 
     } 

     protected override System.ServiceModel.Description.ServiceDescription CreateDescription(out System.Collections.Generic.IDictionary<string, System.ServiceModel.Description.ContractDescription> implementedContracts) 
     { 
      System.ServiceModel.Description.ServiceDescription description = base.CreateDescription(out implementedContracts); 

      _implementedContracts = implementedContracts; 

      return description; 
     } 
    } 

私はweb.configファイルにWCFの設定を試してみました

<protocolMapping> 
    <add scheme="http" binding="wsHttpBinding"/> 
</protocolMapping> 
1

を結合するものを設定します。

ワークフローでは、最初のリクエストを除いてすべてのコントロールを細かく行う必要があります。たとえば、すべての従業員は経費報告を開始できますが、特定の経費報告を開始した従業員だけが経費を追加して提出することができます。これらのセキュリティチェックは、WF Security Packを使用して行うことができます。

+0

unamed WSHttpBindingを追加し、サービスモデルで、次のセクションでは、あまりにも動作するはずですが、デフォルトの設定のために私の例のセクションでは動作しませんでした。 –

+0

WCFでのやり方は、サービスと同じ名前の設定ファイルにエンドポイントを作成し、バインド(とセキュリティ)を設定することです。しかし、それはワークフローサービスに名前を付けるユーザーだからできません。私が必要とするのは、特定のサービスが使用するバインディングを指定することだと思います。 –

+0

すべてのワークフローサービスで同じ設定が必要な場合は、名前の付いていないバインディングを作成できます。すべてのサービスでデフォルトとして使用されます。また、WorkflowServiceHostを使用してバインディング/エンドポイントを構成することもできます。 – Maurice

2

Workflow TVのエピソードがあります。 Workflow TV - Workflow Services Security

+0

素敵なリソース、どうやってそれを逃したのですか?この質問がこのリンクを見つけられなかった誰かに助けてくれることを願っています。 –

+0

ビデオはとても素敵ですが、あなたが言ったように、それはアーキテクチャ、 (私の質問のタイトルは編集されたかもしれませんが、私は内部を理解したかったというアイデアを渡しました。 –

関連する問題