public void Register(IAppHost appHost) { var contentTypes = (ContentTypes)appHost.ContentTypes; var predefinedRoutes = appHost.GetPlugin <PredefinedRoutesFeature>(); if (predefinedRoutes == null) { throw new NotSupportedException("SoapFormat requires the PredefinedRoutesFeature Plugin"); } if (!DisableSoap11) { contentTypes.Register(MimeTypes.Soap11, SoapHandler.SerializeSoap11ToStream, null); contentTypes.ContentTypeStringSerializers[MimeTypes.Soap11] = (r, o) => SoapHandler.SerializeSoap11ToBytes(r, o).FromUtf8Bytes(); var soap11 = ContentFormat.GetContentFormat(Format.Soap11); predefinedRoutes.HandlerMappings[soap11] = () => new Soap11MessageReplyHttpHandler(); } if (!DisableSoap12) { contentTypes.Register(MimeTypes.Soap12, SoapHandler.SerializeSoap12ToStream, null); contentTypes.ContentTypeStringSerializers[MimeTypes.Soap12] = (r, o) => SoapHandler.SerializeSoap12ToBytes(r, o).FromUtf8Bytes(); var soap12 = ContentFormat.GetContentFormat(Format.Soap12); predefinedRoutes.HandlerMappings[soap12] = () => new Soap12MessageReplyHttpHandler(); } }
public virtual void WriteSoapMessage(IRequest req, System.ServiceModel.Channels.Message message, Stream outputStream) { try { using (var writer = XmlWriter.Create(outputStream, Config.XmlWriterSettings)) { message.WriteMessage(writer); } } catch (Exception ex) { var response = OnServiceException(req, req.Dto, ex); if (response == null || !outputStream.CanSeek) { return; } outputStream.Position = 0; try { message = SoapHandler.CreateResponseMessage(response, message.Version, req.Dto.GetType(), req.GetSoapMessage().Headers.Action == null); using (var writer = XmlWriter.Create(outputStream, Config.XmlWriterSettings)) { message.WriteMessage(writer); } } catch { } } finally { HostContext.CompleteRequest(req); } }
public string SerializeToString(IRequest req, object response) { var contentType = req.ResponseContentType; if (this.ContentTypeSerializers.TryGetValue(contentType, out var responseStreamWriter) || this.ContentTypeSerializers.TryGetValue(ContentFormat.GetRealContentType(contentType), out responseStreamWriter)) { using (var ms = MemoryStreamFactory.GetStream()) { responseStreamWriter(req, response, ms); ms.Position = 0; var result = new StreamReader(ms, UTF8EncodingWithoutBom).ReadToEnd(); return(result); } } if (this.ContentTypeSerializersAsync.TryGetValue(contentType, out var responseWriter) || this.ContentTypeSerializersAsync.TryGetValue(ContentFormat.GetRealContentType(contentType), out responseWriter)) { using (var ms = MemoryStreamFactory.GetStream()) { responseWriter(req, response, ms).Wait(); var bytes = ms.ToArray(); var result = bytes.FromUtf8Bytes(); return(result); } } var contentTypeAttr = ContentFormat.GetEndpointAttributes(contentType); switch (contentTypeAttr) { case RequestAttributes.Xml: return(XmlSerializer.SerializeToString(response)); case RequestAttributes.Json: return(JsonDataContractSerializer.Instance.SerializeToString(response)); case RequestAttributes.Jsv: return(TypeSerializer.SerializeToString(response)); #if !NETSTANDARD1_6 case RequestAttributes.Soap11: return(SoapHandler.SerializeSoap11ToBytes(req, response).FromUtf8Bytes()); case RequestAttributes.Soap12: return(SoapHandler.SerializeSoap12ToBytes(req, response).FromUtf8Bytes()); #endif } throw new NotSupportedException("ContentType not supported: " + contentType); }
public byte[] SerializeToBytes(IRequest req, object response) { var contentType = req.ResponseContentType; StreamSerializerDelegate responseStreamWriter; if (this.ContentTypeSerializers.TryGetValue(contentType, out responseStreamWriter) || this.ContentTypeSerializers.TryGetValue(ContentFormat.GetRealContentType(contentType), out responseStreamWriter)) { using (var ms = MemoryStreamFactory.GetStream()) { responseStreamWriter(req, response, ms); ms.Position = 0; return(ms.ToArray()); } } ResponseSerializerDelegate responseWriter; if (this.ContentTypeResponseSerializers.TryGetValue(contentType, out responseWriter) || this.ContentTypeResponseSerializers.TryGetValue(ContentFormat.GetRealContentType(contentType), out responseWriter)) { using (var ms = MemoryStreamFactory.GetStream()) { var httpRes = new HttpResponseStreamWrapper(ms, req); responseWriter(req, response, httpRes); ms.Position = 0; return(ms.ToArray()); } } var contentTypeAttr = ContentFormat.GetEndpointAttributes(contentType); switch (contentTypeAttr) { case RequestAttributes.Xml: return(XmlSerializer.SerializeToString(response).ToUtf8Bytes()); case RequestAttributes.Json: return(JsonDataContractSerializer.Instance.SerializeToString(response).ToUtf8Bytes()); case RequestAttributes.Jsv: return(TypeSerializer.SerializeToString(response).ToUtf8Bytes()); #if !NETSTANDARD1_6 case RequestAttributes.Soap11: return(SoapHandler.SerializeSoap11ToBytes(req, response)); case RequestAttributes.Soap12: return(SoapHandler.SerializeSoap12ToBytes(req, response)); #endif } throw new NotSupportedException("ContentType not supported: " + contentType); }
internal SoapParser(Stream stream) { if (this.bDebug) { this.xmlReader = new XmlTextReader(this.textReader); } else { this.xmlReader = new XmlTextReader(stream); } this.xmlReader.XmlResolver = null; this.xmlReader.DtdProcessing = DtdProcessing.Prohibit; this.soapHandler = new SoapHandler(this); }
public string SerializeToString(IRequest req, object response) { var contentType = req.ResponseContentType; StreamSerializerDelegate responseStreamWriter; if (this.ContentTypeSerializers.TryGetValue(contentType, out responseStreamWriter) || this.ContentTypeSerializers.TryGetValue(ContentFormat.GetRealContentType(contentType), out responseStreamWriter)) { using (var ms = new MemoryStream()) { responseStreamWriter(req, response, ms); ms.Position = 0; var result = new StreamReader(ms, UTF8EncodingWithoutBom).ReadToEnd(); return(result); } } ResponseSerializerDelegate responseWriter; if (this.ContentTypeResponseSerializers.TryGetValue(contentType, out responseWriter) || this.ContentTypeResponseSerializers.TryGetValue(ContentFormat.GetRealContentType(contentType), out responseWriter)) { using (var ms = new MemoryStream()) { var httpRes = new HttpResponseStreamWrapper(ms) { KeepOpen = true, //Don't let view engines close the OutputStream }; responseWriter(req, response, httpRes); var bytes = ms.ToArray(); var result = bytes.FromUtf8Bytes(); httpRes.ForceClose(); //Manually close the OutputStream return(result); } } var contentTypeAttr = ContentFormat.GetEndpointAttributes(contentType); switch (contentTypeAttr) { case RequestAttributes.Xml: return(XmlSerializer.SerializeToString(response)); case RequestAttributes.Json: return(JsonDataContractSerializer.Instance.SerializeToString(response)); case RequestAttributes.Jsv: return(TypeSerializer.SerializeToString(response)); case RequestAttributes.Soap11: return(SoapHandler.SerializeSoap11ToBytes(req, response).FromUtf8Bytes()); case RequestAttributes.Soap12: return(SoapHandler.SerializeSoap12ToBytes(req, response).FromUtf8Bytes()); } throw new NotSupportedException("ContentType not supported: " + contentType); }