2013-11-01 69 views
0

在實驗室環境中我有三個「應用程序」:Ç途徑路由編碼WCF請求

BC承載WCF聊天服務。 A只是一個客戶。

應用程序看到託管在,和 WCF服務看到託管在Ç WCF serive。 所以A應用程序不能直接發送消息到C

我使用netTcpBinding和Message安全性,使用X509證書進行安全保護。 A應用程序知道BC的證書。

我想創建爲應用的聊天服務的代理,並與一些標誌,它告訴將消息路由到ç應用程序發送消息。另外,我希望郵件使用C證書進行編碼,因此B無法讀取指定給C的郵件。

該問題可以通過許多可怕的方式解決。我有點過期WCF,所以我需要幫助來找到更好的解決方案。

你能提出更好的方法來解決這個問題嗎?

謝謝!

+0

對消息正文進行編碼,將未編碼的路由頭添加到有效負載,並讓服務B根據路由頭進行路由。或者實現[路由](http://msdn.microsoft.com/en-us/library/ee517423(v = vs.110).aspx)。 – CodeCaster

+0

我還有其他問題。 – RollingStone

+0

這些問題是? – CodeCaster

回答

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

您建議訊息話題機身採用Ç公共密鑰加密。並且消息體將由wcf基礎結構與B公鑰一起被加密加密。我是否正確?

是否正確,我可以使用IEndPointBehavior的自定義實現和IClientMessageInspector的自定義實現(beforesendrequest方法)對消息正文進行編碼?