在Wcf客户端没有连接到主机

时间:2014-10-04 12:00:10

标签: wcf

必须保护请求消息。这是合同操作所必需的(' IMyNumericService',' http://tempuri.org/')。必须通过绑定提供保护(' BasicHttpBinding',' http://tempuri.org/')。

当我尝试连接到我已注册我的服务的主机时,我收到了上述异常。但主机正在工作,当我尝试从客户端应用程序连接它显示异常

1 个答案:

答案 0 :(得分:0)

启用WCF中的客户端和服务安全性。您可以在WCF中的消息,故障,操作和/或服务级别设置通过线路发送的消息的保护级别。有三个消息ProtectionLevel属性flavor要设置为属性。这可确保用于服务的任何端点都至少需要此保护级别。

无 纯文本在电线上传播。 标志 邮件已经过数字签名。 确保不对邮件进行任何修改。 该消息仍然是纯文本。 EncryptAndSign 签名之前,邮件已加密。 确保不对邮件进行任何修改并加扰。 例如,如果EchoService在ServiceContract级别上设置了EncryptAndSign的ProtectionLevel,则具有BasicHttpBinding的端点将无法启动。这是因为默认情况下BasicHttpBinding不支持此保护级别(可以启用它)。 [ServiceContract(ProtectionLevel = ProtectionLevel.EncryptAndSign)]     公共接口IEchoService     {         [OperationContract(IsOneWay = true)]         void RegisterClient(Guid guid);

    [FaultContract(typeof(EchoFault))]
    [OperationContract]
    EchoMessage Echo(EchoMessage message);

    [OperationContract]
    List<EchoMessage> GetAllEchos();
}

将此保护级别与BasicHttpBinding端点一起使用会导致主机出现异常。

System.InvalidOperationException:必须保护请求消息。这是合同运作所需要的[..]。必须通过绑定[..]来提供保护。

但是,如果我们将端点绑定更改为例如wsHttpBinding,则服务运行正常。这是因为WsHttpBinding默认支持EncryptAndSign保护级别。