예제 #1
0
        /// <summary>
        /// 响应Soap请求
        /// </summary>
        /// <param name="httpContext">请求上下文</param>
        /// <param name="result">响应结果</param>
        /// <param name="resultName">响应参数名</param>
        public static void CreateSoapResponse(HttpContext httpContext, object result, string resultName = "")
        {
            Message responseMessage;
            var     encoder    = new BasicHttpBinding().CreateBindingElements().Find <MessageEncodingBindingElement>()?.CreateMessageEncoderFactory().Encoder;
            var     actionName = httpContext.Request.Headers["SOAPAction"].FirstOrDefault()?.Trim('"').Split('/').LastOrDefault();
            var     bodyWriter = new ServiceBodyWriter("http://tempuri.org/", actionName + "Response", string.IsNullOrEmpty(resultName) ? (actionName + "Result") : resultName, result);

            responseMessage = Message.CreateMessage(encoder.MessageVersion, null, bodyWriter);
            httpContext.Response.ContentType           = httpContext.Request.ContentType;
            httpContext.Response.Headers["SOAPAction"] = responseMessage.Headers.Action;
            encoder.WriteMessage(responseMessage, httpContext.Response.Body);
        }