2009-10-13 18 views
5

コンソールアプリケーションとWindowsサービスとして実行できるWCFサービスがあります。私は最近、次のセキュリティ設定のW2K3サーバーにコンソールアプリケーションをコピーしました:WindowsサービスでのWCFセキュリティ

<wsHttpBinding> 
<binding name="ServiceBinding_Security" transactionFlow="true" > 
    <security mode="TransportWithMessageCredential" > 
    <message clientCredentialType="UserName" /> 
    </security>   
</binding>    
</wsHttpBinding> 

<serviceCredentials> 
<userNameAuthentication userNamePasswordValidationMode="Custom" 
    customUserNamePasswordValidatorType="Common.CustomUserNameValidator, Common" /> 
</serviceCredentials> 

セキュリティは問題なく問題なく動作します。私は正確に同じコードを持っていますが、Windowsサービスで実行されていると私は、クライアントからのいずれかの方法を呼び出すしようとすると、私は次のエラーを取得する:

System.ServiceModel.Security.MessageSecurityException was unhandled 
Message="An unsecured or incorrectly secured fault was received from 
     the other party. See the inner FaultException for the fault code and detail." 
    Source="mscorlib" 
    StackTrace: 
    Server stack trace: 
     at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout) 
     ...... 
    (lots of stacktrace info - not very useful) 

    InnerException: System.ServiceModel.FaultException 
     Message="An error occurred when verifying security for the message." 

例外は私に何も伝えていません。私はそれがWindowsサービスからのシステムリソースへのアクセスと関係があると仮定しています。私はコンソールアプリケーションと同じアカウントで実行しようとしましたが、運はありません。誰にもアイデアはありますか?

+0

これは私に痛い頭を与えました... – James

+0

セキュリティ情報は次のとおりです。 <バインディング名= "ServiceBinding_Security" transactionFlow = "真"> <セキュリティモード= "TransportWithMessageCredential"> \t <メッセージclientCredentialType = "ユーザー名" /> \t \t \t \t \t \t \t Alphonso

答えて

0

カスタムユーザー/名前バリデーターを使用しています - Windowsサービスはそのファイルにアクセスできますか?

あなたはNTサービスをどのアカウントで実行していますか?

すべてのセキュリティをオフにしても機能しますか?これは時々、セキュリティとは何の関係もないとエラーになり

マルク・

+0

診断エラー・メッセージ=セキュリティプロトコルは、着信メッセージを確認することはできません。他に何もない。 サービスがセキュリティなしで動作することを確認できます。 "ローカルシステム"と "管理者"の下でサービスを実行しようとしました カスタム名検証ツールは、app.configのカスタムセクションに対して検証しています。 – Alphonso

1

(単に参照します)。

私はあなたが最初にセキュリティなしで、次にメッセージセキュリティだけで、その後はトランスポートで、最後にTransportWithMessageCredentialで動作させることをお勧めします。あなたがサービスの診断を有効に

1

ポートの競合を避けるために、Windowsサービスを開始する前に、コンソールアプリケーションを停止することを確認しコンソールアプリケーションと同じマシン上のWindowsサービスアプリケーションを実行している場合も

。それは、サービスがメッセージを受信して​​いるかどうか、そしてサービスがどこに例外を投げているのかをかなり良く知っているはずです。

1

更新 - customUserNamePasswordValidatorTypeをCustomからWindowsに変更しました。これはConsoleとWindowsサービスの両方でうまくいきました。私はカスタムバリデーターの何かが問題を引き起こしていると仮定することができます。

カスタムバリデータは、App.configでカスタム設定セクションを使用して、ユーザーIDとパスワードを検証しました。私はこれがWindowsサービスから働いていたと思ったでしょう。

回答を投稿したすべての方に感謝します。

関連する問題