Как решить эту 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 в обработчике?