2009-06-30 16 views
5

Ragazzi/ragazze stiamo avendo prestazioni terribili con il nostro sito Web che utilizza WCF come applicazione successiva. Utilizziamo sicurezza e certificati a livello di messaggio (autenticazione reciproca). Stiamo cache il channel factory nell'oggetto applicazione:Prestazioni terribili con WCF e certificati (autenticazione reciproca)

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 

     Dim loChannelFactor As New ChannelFactory(Of OurReference.IWCFChannel)("ClientEndpoint") 
     loChannelFactor.Open() 
     Application.Add("ChannelFactory", loChannelFactor) 
End Sub 

In ogni pagina che abbiamo bisogno di dati che facciamo la seguente:

Dim Proxy = DirectCast(voWebApp("ChannelFactory"), ChannelFactory(Of OurInfoReference.IOurInfoChannel)).CreateChannel 

Proxy.DataCall() 

If roWCFService IsNot Nothing Then 
     CType(roWCFService, ICommunicationObject).Close() 
     roWCFService = Nothing 
End If 

anche io ho impostato EstablishSecurityContext = true.

Non si desidera memorizzare nella cache il proxy perché si è verificato un errore con uno stato proxy guasto. Per quanto ne so, la pila di canali dovrebbe essere comunque sufficiente. Quando accendo il monitoraggio, sto vedendo un gruppo di comandi SCT anziché solo per la prima chiamata, come mi aspetterei. Qualcuno sa cosa sta succedendo. Stiamo memorizzando nella cache la fabbrica del canale in modo errato?

grazie, NCAGE

+0

Fare riferimento a questo articolo che potrebbe essere di aiuto. http://webservices20.blogspot.com/2009/01/wcf-performance-gearing-up-your-service.html – Verybiztalker

risposta

5

sembra che si potrebbe risolvere utilizzando un certificato da un'autorità di ceritificate:

"MakeCert è uno strumento fornito da Microsoft per creare certificati di prova che possono essere utilizzati durante lo sviluppo di un prodotto (solo per lo sviluppo e il test) Questi certificati hanno anche problemi di prestazioni, alcune operazioni di crittografia possono essere eseguite lentamente quando vengono utilizzate.I certificati rilasciati da un'autorità di certificazione vera non presentano questo problema ed è un problema noto. "

http://weblogs.asp.net/cibrax/archive/2006/08/08/Creating-X509-Certificates-for-WSE-or-WCF.aspx

Edit: può essere l'attività supplementare è dovuto alla stretta di mano iniziale, durante la creazione di una sessione. L'impostazione predefinita WCF è per chiamata, ovvero viene creata una nuova sessione per ogni chiamata. Si potrebbe provare la marcatura il tuo contratto con:

[ServiceContract (Session = true)]

che può mantenere la sessione ed evitare la stretta di mano iniziale.

+0

Attualmente stiamo utilizzando certificati di fiducia. Non usiamo certificati autofirmati. – coding4fun

+0

Fatto interessante, prenderò nota di ciò per ricerche future. – jpierson

0

Ricordo un problema simile, tuttavia è stato un buon 18 mesi fa. Ho trovato this mentre avevo una rapida occhiata per come ho risolto il problema. Potrebbe aiutare, modifico la mia risposta quando trovo quello che stavo cercando!

+0

L'ho già visto prima. Anche se sono d'accordo con un ragazzo se hai un gruppo di client anonimi che si connettono e fanno una chiamata e poi si disconnettono, i suoi consigli funzionerebbero ma trovo questo altamente improbabile.È più probabile che si desideri un client che si connetta e effettui più chiamate e non sia necessario creare lo stack di comunicazione ogni volta. Se lo hai impostato correttamente, la prima chiamata dovrebbe emettere una chiamata di sincronizzazione asincrona e ogni chiamata successiva dovrebbe semplicemente emettere una chiamata di crittografia di sincronizzazione. – coding4fun

0

Le chiamate SCT/RST aggiuntive stabiliscono il contesto di sicurezza. Se si ricrea il proxy su ogni chiamata, un contesto di sicurezza è un overhead inutile. Spegnilo.

Il modo in cui si utilizza la fabbrica va bene. Tuttavia, il tuo errore nella gestione e chiusura del proxy non lo è. Assicurati di chiudere o interrompere il proxy in ogni caso. Controlla msdn per il modello raccomandato.

Inoltre, puoi fornire alcune cifre su come le prestazioni negative sono?

Problemi correlati