¿Cómo resolver esta excepción InvalidCastException al aplicar ClientCertificate a WCF DataService Client?
He usado los ejemplos enEste artículo para agregar autenticación de certificado de cliente a mi servicio de datos WCF. Tuve que cambiar el ejemplo ligeramente porque estoy usando WCF DataService 5.6 en el que elSendingRequest
evento ha sido desaprobado y reemplazado porSendingRequest2
.
Básicamente esto significó cambiar el siguiente controlador de eventos:
private void OnSendingRequest_AddCertificate(object sender, SendingRequestEventArgs args)
{
if (null != ClientCertificate)
{
((HttpWebRequest)args.Request).ClientCertificates.Add(ClientCertificate);
}
}
A:
private void OnSendingRequest_AddCertificate(object sender, SendingRequest2EventArgs args)
{
if (null != ClientCertificate)
{
((HttpWebRequestMessage)args.RequestMessage).HttpWebRequest.ClientCertificates.Add(ClientCertificate);
}
}
Esto parece funcionar. Sin embargo ahora me sale lo siguienteInvalidCastException
en algunas acciones:
System.InvalidCastException: no se puede convertir el objeto de tipo 'System.Data.Services.Client.InternalODataRequestMessage' para escribir 'System.Data.Services.Client.HttpWebRequestMessage'.
No he podido identificar con 100% de precisión cuáles son estas acciones, pero parece ser coherente con el método SaveChanges (vea stacktrace a continuación :)
at MyNamespace.MyContainer.OnSendingRequest_AddCertificate(Object sender, SendingRequest2EventArgs args)
at System.Data.Services.Client.ODataRequestMessageWrapper.FireSendingRequest2(Descriptor descriptor)
at System.Data.Services.Client.BatchSaveResult.GenerateBatchRequest()
at System.Data.Services.Client.BatchSaveResult.BatchRequest()
at System.Data.Services.Client.DataServiceContext.SaveChanges(SaveChangesOptions options)
Llegué a la modificación deSendingRequest
aSendingRequest2
Por prueba y error, me pregunto si pasé por alto algo allí. ¿O es esto sin relación alguna y debería agregar un&& args.RequestMessage is HttpWebRequestMessage
a la sentencia if en el controlador?