this article의 예제를 사용하여 내 WCF 데이터 서비스에 클라이언트 인증서 인증을 추가했습니다. SendingRequest
이벤트가 더 이상 사용되지 않고 SendingRequest2
으로 대체 된 WCF DataService 5.6을 사용 중이기 때문에 예제를 약간 변경해야했습니다.ClientCertificate를 WCF DataService Client에 적용하는 동안이 InvalidCastException을 해결하는 방법은 무엇입니까?
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);
}
}
이 작동하는 것 같다
기본적으로이 다음 이벤트 처리기를 변경하는 것을 의미했다.System.InvalidCastException : 그러나 지금은 일부 작업에
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
으로 바뀌 었습니다. 아니면 전혀 관련이 없으며 처리기의 if 문에 && args.RequestMessage is HttpWebRequestMessage
을 추가해야합니까?
그래서 일괄 처리 작업 요청은 여러 요청을 래핑하고 해당 요청을 포함하는 각 요청에 대해서도 해당 이벤트가 실행된다는 것입니다. 나는 일괄 작업이 여러 작업을 설명하는 하나의 요청이라는 것을 항상 이해했습니다. 이 코드를 작업 한 이후로 꽤 오래되었습니다.나는 이것을 곧 시험해 볼 기회가 있는지 확신 할 수 없다. 내가 가지고있을 때, 나는 그 결과로 다시 체크 할 것이다. 어쨌든 고마워! –