/// <summary> /// Sends a request over the secure channel. /// </summary> public IServiceResponse SendRequest(IServiceRequest request) { if (m_wcfBypassChannel != null) { return(m_wcfBypassChannel.SendRequest(request)); } byte[] requestMessage = BinaryEncoder.EncodeMessage(request, m_messageContext); InvokeServiceResponseMessage responseMessage = InvokeService(new InvokeServiceMessage(requestMessage)); return((IServiceResponse)BinaryDecoder.DecodeMessage(responseMessage.InvokeServiceResponse, null, m_messageContext)); }
/// <summary> /// Completes an asynchronous operation to send a request over the secure channel. /// </summary> public IServiceResponse EndSendRequest(IAsyncResult result) { if (m_wcfBypassChannel != null) { return(m_wcfBypassChannel.EndSendRequest(result)); } #if MANAGE_CHANNEL_THREADS return(SendRequestAsyncResult.WaitForComplete(result)); #else InvokeServiceResponseMessage responseMessage = EndInvokeService(result); return((IServiceResponse)BinaryDecoder.DecodeMessage(responseMessage.InvokeServiceResponse, null, m_messageContext)); #endif }
/// <summary> /// Dispatches an incoming binary encoded request. /// </summary> /// <param name="request">Request.</param> /// <returns>Invoke service response message.</returns> public virtual InvokeServiceResponseMessage InvokeService(InvokeServiceMessage request) { IServiceRequest decodedRequest = null; IServiceResponse response = null; // create context for request and reply. ServiceMessageContext context = MessageContext; try { // check for null. if (request == null || request.InvokeServiceRequest == null) { throw new ServiceResultException(StatusCodes.BadDecodingError, Utils.Format("Null message cannot be processed.")); } // decoding incoming message. decodedRequest = BinaryDecoder.DecodeMessage(request.InvokeServiceRequest, null, context) as IServiceRequest; // invoke service. response = ProcessRequest(decodedRequest); // encode response. InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(response, context); return(outgoing); } catch (Exception e) { // create fault. ServiceFault fault = CreateFault(decodedRequest, e); // encode fault response. if (context == null) { context = new ServiceMessageContext(); } InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(fault, context); return(outgoing); } }
/// <summary> /// Dispatches an incoming binary encoded request. /// </summary> /// <param name="ar">The ar.</param> /// <returns></returns> public virtual InvokeServiceResponseMessage EndInvokeService(IAsyncResult ar) { try { // wait for the response. IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, false); // encode the repsonse. InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(response, MessageContext); return(outgoing); } catch (Exception e) { // create fault. ServiceFault fault = CreateFault(ProcessRequestAsyncResult.GetRequest(ar), e); // encode the fault as a response. InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(fault, MessageContext); return(outgoing); } }
/// <summary> /// Dispatches an incoming binary encoded request. /// </summary> /// <param name="ar">The ar.</param> /// <returns></returns> public virtual InvokeServiceResponseMessage EndInvokeService(IAsyncResult ar) { try { // wait for the response. IServiceResponse response = ProcessRequestAsyncResult.WaitForComplete(ar, false); // encode the repsonse. InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(response, MessageContext); return outgoing; } catch (Exception e) { // create fault. ServiceFault fault = CreateFault(ProcessRequestAsyncResult.GetRequest(ar), e); // encode the fault as a response. InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(fault, MessageContext); return outgoing; } }
/// <summary> /// Dispatches an incoming binary encoded request. /// </summary> /// <param name="request">Request.</param> /// <returns>Invoke service response message.</returns> public virtual InvokeServiceResponseMessage InvokeService(InvokeServiceMessage request) { IServiceRequest decodedRequest = null; IServiceResponse response = null; // create context for request and reply. ServiceMessageContext context = MessageContext; try { // check for null. if (request == null || request.InvokeServiceRequest == null) { throw new ServiceResultException(StatusCodes.BadDecodingError, Utils.Format("Null message cannot be processed.")); } // decoding incoming message. decodedRequest = BinaryDecoder.DecodeMessage(request.InvokeServiceRequest, null, context) as IServiceRequest; // invoke service. response = ProcessRequest(decodedRequest); // encode response. InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(response, context); return outgoing; } catch (Exception e) { // create fault. ServiceFault fault = CreateFault(decodedRequest, e); // encode fault response. if (context == null) { context = new ServiceMessageContext(); } InvokeServiceResponseMessage outgoing = new InvokeServiceResponseMessage(); outgoing.InvokeServiceResponse = BinaryEncoder.EncodeMessage(fault, context); return outgoing; } }