5

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

<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 サービスからのシステム リソースへのアクセスと関係があると思います。コンソール アプリと同じアカウントで実行しようとしましたが、うまくいきません。誰にもアイデアはありますか?

4

4 に答える 4

1

これは、セキュリティとは関係のないエラーです。

最初にセキュリティなしで動作させることをお勧めします。次に、メッセージ セキュリティのみ、次にトランスポート、最後に TransportWithMessageCredential を使用します。

また、同じマシンでコンソール アプリと Windows サービス アプリを実行している場合は、ポートの競合を避けるために、Windows サービスを開始する前にコンソール アプリを停止してください。

于 2009-10-13T15:35:51.733 に答える
1

更新 - customUserNamePasswordValidatorType を Custom から Windows に変更しました。これは、コンソールと Windows サービスの両方で正常に機能しました。Custom Validator の何かが問題を引き起こしているとしか思えません。

カスタム バリデータは、App.config のカスタム構成セクションを使用して、ユーザー ID とパスワードを検証しました。ただし、これはWindowsサービスから機能すると思っていたでしょう。

返信を投稿してくれたすべての人に感謝します。

于 2009-10-15T10:12:57.620 に答える
1

サービスの診断を有効にします。これにより、サービスがメッセージを受信して​​いるかどうか、およびサービスがどこで例外をスローしているかについて、かなり良いアイデアが得られるはずです。

于 2009-10-13T15:37:01.107 に答える
0

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

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

すべてのセキュリティをオフにしても機能しますか?? (見るだけ)

マルク

于 2009-10-13T15:34:57.360 に答える