/// <summary> /// Initializes a new instance of the <see cref="WcfDualChannelClient{TChannel, TCallback}"/> class. /// </summary> /// <param name="endpoint">The endpoint at which the service is hosted.</param> /// <param name="callback">The <typeparamref name="TCallback" /> object to use for the callback.</param> /// <param name="callbackIdentifier">An identifier to use in the callback URI.</param> /// <exception cref="ArgumentNullException"> /// <paramref name="endpoint" /> is null. /// <para>or</para> /// <paramref name="callback" /> is null. /// </exception> public WcfDualChannelClient(Uri endpoint, TCallback callback, string callbackIdentifier) : base(MessageTransferType.Http, endpoint) { CallbackEndpoint = BuildCallbackUri(endpoint, callbackIdentifier); _callbackHost = OpenCallbackHost(callback, CallbackEndpoint); Endpoint.Behaviors.Add(new DualChannelBehavior(CallbackEndpoint)); }
private static WcfHost <TCallback> OpenCallbackHost(TCallback callbackObject, Uri callbackEndpoint) { WcfHost <TCallback> callbackChannel = null; try { callbackChannel = new WcfHost <TCallback>(callbackObject, MessageTransferType.Http, callbackEndpoint); callbackChannel.Open(); return(callbackChannel); } catch { try { (callbackChannel as IDisposable)?.Dispose(); } catch (CommunicationObjectFaultedException) { callbackChannel.Abort(); } throw; } }