2012-01-03 10 views
1

私は従来の.net 2.0 .asmx Webサービスを使用しています(WCFに切り替えることを納得させました。私はカスタムSOAPヘッダーを使用するだけでなく、各リンクに認証コードを持たずにユーザーを認証する方法を見つけようとしています。SoapHeaderAttributeをオーバーライドして、属性に認証を追加しようとしています

現在、私のWebサービスは、次のようになります。理想的には

public WebserviceAuthentication currentUser; 

    [WebMethod(Description="Returns the logged in users credentials")] 
    [SoapHeader("currentUser")] 
    public string HelloWorld() 
    { 
     var user = AuthenticateUser(currentUser, WebServiceResources.MEDICAREELIGIBILITY_HELLOWORLD); 
     return string.Format("{0} {1} {2}", user.User.UserName, user.User.ProviderUserKey, user.AccountId); 
    } 

、私は次のようにコードを変更したい:

public WebserviceAuthentication currentUser; 
    public CustomAuthentication user; 

    [WebMethod(Description="Returns the logged in users credentials")] 
    [SoapHeaderAuthentication("currentUser")] 
    public string HelloWorld() 
    { 
     return string.Format("{0} {1} {2}", user.User.UserName, user.User.ProviderUserKey, user.AccountId); 
    } 

SoapHeaderAuthenticationがあるCurrentUserを読み、情報があることを確認します登録ユーザー。そうであれば、カスタムユーザーオブジェクトを返し、ユーザーオブジェクトを設定します。 Webサービス内からユーザオブジェクトにアクセスすることができました。

問題は、密閉されたクラスなので、私はSoapHeaderAttributeを拡張できません。

+0

WSEは使用できますか? –

+0

おそらく。例がありますか? – Cyfer13

+0

実際はありません。最近の実装では、WSEでヘッダーをより詳細に制御できるようになったことは分かっています。 –

答えて

1

これはバックビットを行っているが、私はあなたが拡張することができ記事を書いた:here

+0

だから私はあなたが書いたものとこの記事に挙げられているものを組み合わせた:http://www.codeguru.com/columns/experts/article.php/c5479。これまでのところ、私は認証が働いていますが、WebサービスからCustomAuthenticationオブジェクトにアクセスすることはできません。また、私の属性から拡張メソッドに値を渡す方法を理解しようとしています。 – Cyfer13

+0

だから私は、今すぐパラメータを渡して属性を持っているが、まだWebサービスからCustomAuthenticationオブジェクトにアクセスする方法を把握することはできません。どんな援助も訴えられるでしょう。 – Cyfer13

0

すべてのリクエストに応じて制御を取得することを許可しますASMX Webサービスでのみ拡張メカニズムについて学ぶためにSoapExtension classを参照してください。 (または応答)。

関連する問題