1

トランスポートレベルとメッセージレベルのセキュリティコードの違いを教えてもらえますか。また、それらの使用方法。メッセージセキュリティモードを使用しているときに、次のエラーが発生します。

<message algorithmSuite="Default" clientCredentialType="UserName"/>

例外 :

System.ServiceModel.CommunicationObjectFaultedException:通信オブジェクトSystem.ServiceModel.ChannelFactory`1は、Faulted状態であるため、通信に使用できません。

4

2 に答える 2

3

メッセージ セキュリティは、個々のメッセージを暗号化して機密データを保護します。トランスポート セキュリティは、ネットワーク トラフィックを保護するためにエンド ツー エンドのネットワーク接続を保護します。

次のトランスポート セキュリティ基準を使用して、使用するかどうかを決定します。

ポイントからポイントへ。トランスポート セキュリティは、ポイント ツー ポイント通信をサポートしますが、中間のシナリオやプロトコルの移行はサポートしません。

ストリーミング。トランスポート セキュリティは、ストリーミング データのシナリオをサポートできます。

バインディングの制限。トランスポート セキュリティは、wsDualHttpBinding では機能しません。

認証の制限。トランスポート セキュリティは、ネゴシエーション、ユーザー名、または Kerberos 直接認証では機能しません。

次のメッセージ セキュリティ基準を使用して、使用するかどうかを決定します。

仲介者。メッセージ セキュリティは、仲介者またはプロトコル遷移を伴うシナリオをサポートします。

暗号化の柔軟性。メッセージ セキュリティを使用すると、メッセージの一部を暗号化し、他の部分をクリア テキストのままにすることができます。

バインディングの制限。メッセージ セキュリティは、netNamedPipeBinding では機能しません。安全な会話。安全な会話は、メッセージ セキュリティでのみ機能します。

認証の制限。メッセージ セキュリティは、基本認証またはダイジェスト認証では機能しません。

于 2012-06-25T09:44:26.137 に答える
0

発生するエラーは、おそらく問題の原因ではありません。実際に何が起こるかを確認するには、以下に定義されているサービス プロキシを使用してみてください。

public class ServiceProxy<T> : IDisposable where T : class, ICommunicationObject
{
    public ServiceProxy(T client)
    {
        Client = client;
    }

    public T Client { get; private set; }

    public void Dispose()
    {
        if (Client != null &&
            Client.State != CommunicationState.Closed &&
            Client.State != CommunicationState.Faulted)
        {
            Client.Close();
        }
    }
}

次のように使用します。

using (var c = new ServiceProxy<[yourservicetypehere]>(new [yourservicetypehere]()))
{
    try
    {
        var rep = c.Client.[yourservicemethodhere](......);
    }

    catch (Exception exception)
    {
        // Trap exception here to see what is really happening.
    }

    finally
    {
        c.Client.Close();
    }
}
于 2012-06-25T09:44:44.403 に答える