2017-01-02 12 views
0

IContractBehaviorIWsdlExportExtensionを実装するWCFサービスがあり、ユーザーの許可された操作でWSDLを生成し、アクセスできない操作と型は除外します。WCFメタデータへのパラメータの受け渡し

ただし、この制限は各ユーザーごとに、どのユーザーにWSDLを生成するかを手動で変更する必要があることです。

メタデータのリクエストの一部としてユーザーに渡すことでこの制限を修正したいと考えています。

  • localhost/service.svc?user=me
    または
  • localhost:9766/service.svc?singleWsdl&user=me

も限り結果のWSDLが平坦化されるように働く代わりに私がsvcutilを使用することができます。

答えて

0

私は、コンソールアプリケーションでのサービスをホスト以下に

  • を行うことによって、この作業を取得することができました。
  • IContractBehaviorが追加されたエンドポイントを追加し、希望のパラメータをIContractBehaviorクラスに渡しました。
  • サービスが開いたら、私はコード

    const string BASE_ADDRESS = 
    "http://localhost:8731/Design_Time_Addresses/CalcService"; 
    var uri = new Uri(BASE_ADDRESS); 
    var user = "userName"; 
    
    using (var serviceHost = new ServiceHost(typeof(Calc), uri)) 
    { 
        var exporter = new WsdlExporter(); 
        var endpoint = serviceHost.AddServiceEndpoint(typeof(ICalc), 
        new BasicHttpBinding(), ""); 
        endpoint.Contract.Behaviors.Add(new 
        RestrictedOperationsWsdlExportExtensionAttribute(user)); 
        serviceHost.Open(); 
        Console.WriteLine("The service is ready: " + user); 
        exporter.ExportEndpoint(endpoint); 
        if (exporter.Errors.Count == 0) 
        { 
        var metadataSet = exporter.GetGeneratedMetadata(); 
        var asy= Assembly.GetAssembly(typeof(WsdlExporter)); 
        var t = asy.GetType("System.ServiceModel.Description.WsdlHelper", 
         true); 
        var method = t.GetMethod("GetSingleWsdl", 
         System.Reflection.BindingFlags.Public 
         | System.Reflection.BindingFlags.Static); 
        var serviceDescription = 
         method.Invoke(null, new object[] {metadataSet}) 
         as System.Web.Services.Description.ServiceDescription; 
        if (serviceDescription != null) 
        { 
         serviceDescription.Name = "Calc"; 
         serviceDescription.Write(user + ".wsdl"); 
        } 
        } 
    } 
    
    ここで説明Metatadaset
  • 最後に私が としてWSDLファイルを生成するためにWsdlHelperを使用
    http://www.shulerent.com/2013/03/14/generating-a-single-flattened-wsdl-from-an-existing-wcf-service/

をエクスポートするWsdlExporterを使用

関連する問題