2012-06-25 137 views
1

任何人都可以告訴我傳輸和消息級安全代碼之間的區別。另外,如何使用它們。我正在當我使用的消息安全模式下面的錯誤:WCF服務中的安全模式

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

例外:

System.ServiceModel.CommunicationObjectFaultedException:通信對象,System.ServiceModel.ChannelFactory`1不能用於通信因爲它處於Faulted狀態。

回答

3

消息安全性會加密每個單獨的消息以保護敏感數據。傳輸安全保護端到端網絡連接以保護網絡流量。

使用下面的傳輸安全標準來決定是否使用與否:

點至點。傳輸安全性支持點對點通信,不支持中介方案或協議轉換。

流媒體。傳輸安全性可以支持流數據場景。

綁定限制。傳輸安全性不適用於wsDualHttpBinding。

身份驗證限制。傳輸安全性不適用於協商,用戶名或Kerberos直接身份驗證。

使用以下信息安全標準來決定是否使用與否:

中介。消息安全支持使用中介或協議轉換的方案。

加密的靈活性。消息安全性允許您加密部分消息,而將其他部分保留爲明文形式。

綁定限制。消息安全性不適用於netNamedPipeBinding。 安全對話。安全對話只適用於消息安全。

身份驗證限制。消息安全性不適用於基本身份驗證或摘要身份驗證。

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(); 
    } 
}