Wie löse ich diese InvalidCastException beim Anwenden des ClientCertificate auf den WCF DataService-Client?

Ich habe die Beispiele in verwendetDieser Beitrag Client-Zertifikat-Authentifizierung zu meinem WCF-Datendienst hinzufügen. Ich musste das Beispiel leicht ändern, da ich WCF DataService 5.6 verwende, in dem dieSendingRequest Ereignis wurde veraltet und ersetzt durchSendingRequest2.

Grundsätzlich bedeutete dies, den folgenden Event-Handler zu ändern:

private void OnSendingRequest_AddCertificate(object sender, SendingRequestEventArgs args)
{
    if (null != ClientCertificate)
    {
        ((HttpWebRequest)args.Request).ClientCertificates.Add(ClientCertificate);
    }
}

Zu:

private void OnSendingRequest_AddCertificate(object sender, SendingRequest2EventArgs args)
{
    if (null != ClientCertificate)
    {
        ((HttpWebRequestMessage)args.RequestMessage).HttpWebRequest.ClientCertificates.Add(ClientCertificate);
    }
}

Das scheint zu funktionieren. Jetzt bekomme ich jedoch folgendesInvalidCastException bei einigen Aktionen:

System.InvalidCastException: Objekt vom Typ 'System.Data.Services.Client.InternalODataRequestMessage' kann nicht in 'System.Data.Services.Client.HttpWebRequestMessage' umgewandelt werden.

Ich konnte nicht mit 100% iger Genauigkeit feststellen, um welche Aktionen es sich handelt, aber es scheint bei der SaveChanges-Methode konsistent zu sein (siehe Stacktrace unten :)

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)

Ich bin zum Umbau von gekommenSendingRequest zuSendingRequest2 durch Versuch und Irrtum, also frage ich mich, ob ich dort etwas übersehen habe. Oder hat das überhaupt nichts zu tun und sollte ich einfach eine hinzufügen?&& args.RequestMessage is HttpWebRequestMessage zur if-Anweisung im Handler?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage