WCF 채널이 오류 상태 일 때 조작을 재 시도하는 우아한 방법을 찾으려고합니다. Policy Injection AB를 사용하여 첫 번째 호출에서 오류 상태 예외가 발생하면 작업을 다시 연결하고 다시 시도했지만 PolicyInjection.Wrap 메서드는 TransparentProxy 개체를 래핑하는 것처럼 보이지 않습니다 (Proxy는 ChannelFactory.CreateChannel에서 반환 됨).WCF 조작 채널에서 재 시도 된 상태의 채널 일 때
시도 할 수있는 다른 메커니즘이 있습니까? 또는 PIAB 솔루션이 올바르게 작동하도록 시도 할 수 있습니까 - 링크, 예제 등을 크게 높이십시오. var proxy = channelFactory.CreateChannel(...);
proxy = PolicyInjection.Wrap<IService>(proxy);
var channelFactory = new ChannelFactory(endpointConfigurationName);
감사합니다 : 여기
private SomeServiceClient proxy;
//This method invokes a service method and recreates the proxy if it's in a faulted state
private void TryInvoke(Action<SomeServiceClient> action)
{
try
{
action(this.proxy);
}
catch (FaultException fe)
{
if (proxy.State == CommunicationState.Faulted)
{
this.proxy.Abort();
this.proxy = new SomeServiceClient();
//Probably, there is a better way than recursion
TryInvoke(action);
}
}
}
//Any real method
private void Connect(Action<UserModel> callback)
{
TryInvoke(sc => callback(sc.Connect()));
}
그리고 코드에서
대신var user = ServiceProxy.Instance.Connect();
MessageBox.Show(user.Name);
의
ServiceProxy.Instance.Connect(user => MessageBox.Show(user.Name));
를 호출해야합니다 :
답변 해 주셔서 감사합니다. 대단히 감사합니다. 이 솔루션에 대한 한 가지 우려는 100-200 번 이상한 서비스 호출에 대해 서비스 호출의 각 호출이 ServiceProxy.Instance.TryInvoke에 래핑되었는지 확인하고 추가해야한다는 것입니다. 추가 서비스 요청이 모두 감싸는 것을 보장하는 유지 보수의 악몽 - 나는 정책 누출 AppBlock (또는 다른 AOP 유형 프레임 워크)을 사용하는 것 이외의 다른 방법을 볼 수 없다. – CraigM