Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
        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;
            }
        }