Как решить эту InvalidCastException при применении ClientCertificate к клиенту WCF DataService?

Я использовал примеры вЭта статья добавить аутентификацию сертификата клиента в мою службу данных WCF. Мне пришлось немного изменить пример, потому что я использую WCF DataService 5.6, в которойSendingRequest Событие устарело и заменено на.SendingRequest2

По сути это означало изменение следующего обработчика событий:

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

Для того, чтобы:

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

Это похоже на работу. Однако теперь я получаю следующееInvalidCastException на некоторые действия:

System.InvalidCastException: невозможно преобразовать объект типа 'System.Data.Services.Client.InternalODataRequestMessage» печатать 'System.Data.Services.Client.HttpWebRequestMessage.

У меня нетя не смог определить с 100% точностью, какие это действия, но похоже на метод SaveChanges последовательно (см. трассировку стека ниже :)

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)

Я пришел к модификации отSendingRequest вSendingRequest2 методом проб и ошибок, поэтому мне интересно, если я там что-то упустил. Или это совершенно не связано, и я должен просто добавить&& args.RequestMessage is HttpWebRequestMessage в оператор if в обработчике?

Ответы на вопрос(2)

Ваш ответ на вопрос