路由编码的wcf请求的方法

时间:2013-11-01 13:12:55

标签: wcf

在实验室环境中,我有三个“应用程序”: A B C

B C 托管WCF聊天服务。 A 只是一个客户。

应用程序看到 B 上托管的WCF服务, B 看到 C 上托管的WCF服务。 因此 A 应用程序无法将邮件直接发送到 C

我使用带有Message安全性的netTcpBinding,并使用X509证书进行保护。 应用知道 B C 的证书。

我想为 B 应用的聊天服务创建一个代理,然后发送一条带有一些标记的消息,告诉 B 将消息路由到 C 应用另外,我希望使用 C 证书对邮件进行编码,因此 B 无法读取指定给 C 的邮件。

问题可以通过许多可怕的方式解决。我对WCF有点过期,所以我需要帮助才能找到更好的解决方案。

你能建议更好的方法来解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我还有其他问题。 如何编码邮件正文?

在客户端,我使用此代码

NetTcpBinding binding = new NetTcpBinding { Security = { Mode = SecurityMode.Message } };
binding.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;

//_foreignServiceCertificate - is the B certificate
//_foreignServiceUrl - is the url of the B service
var endpointIdentity =  EndpointIdentity.CreateDnsIdentity(_foreignServiceCertificate.SubjectName.GetCommonName());
var endPointAddress = new EndpointAddress(new Uri(_foreignServiceUrl), endpointIdentity);

//_thisPeerCertificate - is the A certificate
var channelFactory = new ChannelFactory<IChatService>(binding, endPointAddress);
channelFactory.Credentials.ClientCertificate.Certificate = _thisPeerCertificate;
channelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.Custom;
channelFactory.Credentials.ServiceCertificate.Authentication.CustomCertificateValidator = new ClientCertificateValidation(_foreignServiceCertificate);
IChatService serviceProxy = channelFactory.CreateChannel();

var chatMessage = new ChatMessage { Message = message, MessageSender = _thisPeerCertificate };

serviceProxy.SendMessage(chatMessage);

您建议使用 C 公钥加密消息体。邮件正文将由wcf基础设施以 B 公钥加密加密。我做对了吗?

是否正确,我可以使用IEndPointBehavior的自定义实现和IClientMessageInspector的自定义实现(beforesendrequest方法)对邮件正文进行编码?