/// <summary> /// Send an Http request to an endpoint and waits for a response. /// </summary> /// <param name="soapMessage">A byte array containing the soap message to be sent.</param> /// <param name="remoteEndpoint">A sting containing the name of a remote listening endpoint.</param> /// <returns> /// A WsMessage containing a soap response to the request. This array will be null for OneWay request. /// </returns> public WsMessage SendRequest(WsMessage request, Uri remoteEndpoint) { WsMessage response = new WsMessage(new WsWsaHeader(), null, WsPrefix.None); HttpTransportBindingElement httpClient = new HttpTransportBindingElement(new HttpTransportBindingConfig(remoteEndpoint)); ClientBindingContext ctx = new ClientBindingContext(m_version); ctx.ReceiveTimeout = new TimeSpan(0, 0, 0, 0, ReceiveTimeout); ctx.OpenTimeout = new TimeSpan(0, 0, 0, 0, RequestTimeout); ctx.SendTimeout = new TimeSpan(0, 0, 0, 0, SendTimeout); httpClient.EndpointAddress = remoteEndpoint; Stream stream = null; try { httpClient.Open(ref stream, ctx); httpClient.ProcessOutputMessage(ref request, ctx); ctx.BindingProperties.Clear(); httpClient.ProcessInputMessage(ref response, ctx); ctx.BindingProperties.Clear(); if (response.Body is byte[]) { response.Reader = WsSoapMessageParser.ParseSoapMessage((byte[])response.Body, ref response.Header, m_version); } } finally { httpClient.Close(stream, ctx); } return(response); }