WCF服务中的安全模式

时间:2012-06-25 09:32:26

标签: wcf wcf-security

任何人都可以告诉我传输和消息级安全代码之间的区别。另外,如何使用它们。当我使用消息安全模式时,我收到以下错误:

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

例外:

System.ServiceModel.CommunicationObjectFaultedException:通信对象System.ServiceModel.ChannelFactory`1不能用于通信,因为它处于Faulted状态。

2 个答案:

答案 0 :(得分:3)

邮件安全性会加密每条消息以保护敏感数据。传输安全性可确保端到端网络连接,从而保护网络流量。

使用以下传输安全标准来决定是否使用它:

点至点。传输安全性支持点对点通信,不支持中间方案或协议转换。

流。传输安全性可以支持流数据场景。

绑定限制。传输安全性不适用于wsDualHttpBinding。

身份验证限制。传输安全性不适用于协商,用户名或Kerberos直接身份验证。

使用以下邮件安全标准来决定是否使用它:

中介人。消息安全性支持具有中介或协议转换的方案。

加密灵活性。消息安全性允许您加密部分消息,同时将其他部分保留为明文。

绑定限制。邮件安全性不适用于netNamedPipeBinding。 安全对话。安全对话仅适用于邮件安全。

身份验证限制。邮件安全性不适用于基本身份验证或摘要式身份验证。

答案 1 :(得分: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();
    }
}