任何人都可以告诉我传输和消息级安全代码之间的区别。另外,如何使用它们。当我使用消息安全模式时,我收到以下错误:
<message algorithmSuite="Default" clientCredentialType="UserName"/>
例外:
System.ServiceModel.CommunicationObjectFaultedException:通信对象System.ServiceModel.ChannelFactory`1不能用于通信,因为它处于Faulted状态。
答案 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();
}
}