示例#1
0
        /// <summary>Get Reader for Response</summary>
        protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
        {
            DisposeReaderStreamSpy();
            var reader = SoapHttpClientSpy.GetReaderForMessage(message, bufferSize, CurrentWebRequest, out ReaderStreamSpy);

            return(reader);
        }
示例#2
0
        /// <summary>Get Writer for Request</summary>
        protected override XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize)
        {
            DisposeWriterStreamSpy();
            var writer = SoapHttpClientSpy.GetWriterForMessage(message, bufferSize, base.RequestEncoding, CurrentWebRequest, out WriterStreamSpy);

            return(writer);
        }
        /// <summary>
        /// Override implementation, append the xmlWriterHookInstance into the GetWriterForMessage method
        /// </summary>
        /// <param name="message">The SOAP client message</param>
        /// <param name="bufferSize">The size of the buffer for the xml writer</param>
        /// <returns>An instance of the XmlWriterHook</returns>
        protected override XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize)
        {
            XmlWriter originalXmlWriterImplementation = base.GetWriterForMessage(message, bufferSize);

            this.xmlWriterHookInstance = new XmlWriterInjector(originalXmlWriterImplementation);
            return(this.xmlWriterHookInstance);
        }
示例#4
0
        /// <summary>Get Reader for Response</summary>
        public static XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize, HttpWebRequest request, out SoapHttpClientSpy readerStreamSpy)
        {
            readerStreamSpy = new SoapHttpClientSpy(message.Stream, request, true);
            Encoding encoding = null;
            // Set encoding.
            var charset = GetParameter(message.ContentType, "charset");

            if (!string.IsNullOrEmpty(charset))
            {
                encoding = Encoding.GetEncoding(charset);
            }
            if (encoding == null && !(message.SoapVersion == SoapProtocolVersion.Soap12 && IsApplication(message.ContentType)))
            {
                encoding = Encoding.ASCII;
            }
            if (bufferSize < 0x200)
            {
                bufferSize = 0x200;
            }
            var reader = encoding == null
                                ? new XmlTextReader(readerStreamSpy)
                                : new XmlTextReader(new StreamReader(readerStreamSpy, encoding, true, bufferSize));

            reader.DtdProcessing = DtdProcessing.Prohibit;
            reader.Normalization = true;
            reader.XmlResolver   = null;
            return(reader);
        }
        protected override XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize)
        {
            if (bufferSize < 0x200)
            {
                bufferSize = 0x200;
            }

            return(new XmlSpecialNSPrefixTextWriter(new StreamWriter(message.Stream, (base.RequestEncoding != null) ? base.RequestEncoding : new UTF8Encoding(false), bufferSize)));
        }
示例#6
0
        public object [] ReceiveResponse(WebResponse response, SoapClientMessage message, SoapExtension[] extensions)
        {
            StreamReader sr      = new StreamReader(response.GetResponseStream());
            String       content = sr.ReadToEnd();

            System.Console.WriteLine(content);

            return(null);
        }
        void WriteToWire(SoapMessage message)
        {
            SoapClientMessage clientMessage = message as SoapClientMessage;

            m_state = ProgressState.Sending;
            InitNotification(clientMessage);
            m_applicationStream.Position = 0;
            CopyStream(m_applicationStream, m_wireStream);
        }
示例#8
0
        /// <summary>Get Writer for Request</summary>
        protected override XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize)
        {
            DisposeWriterStreamSpy();
            // Dispose reader too in case it was created by previous call.
            DisposeReaderStreamSpy();
            var writer = SoapHttpClientSpy.GetWriterForMessage(message, bufferSize, base.RequestEncoding, CurrentWebRequest, out WriterStreamSpy);

            return(writer);
        }
示例#9
0
 /// <summary>Get Writer for Request</summary>
 public static XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize, Encoding requestEncoding, HttpWebRequest request, out SoapHttpClientSpy writerStreamSpy)
 {
     writerStreamSpy = new SoapHttpClientSpy(message.Stream, request);
     if (bufferSize < 0x200)
     {
         bufferSize = 0x200;
     }
     return(new XmlTextWriter(new StreamWriter(writerStreamSpy, (requestEncoding != null) ? requestEncoding : new UTF8Encoding(false), bufferSize)));
 }
示例#10
0
        protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
        {
            // Dispose previous reader stream spy.
            DisposeReaderStreamSpy();

            readerStreamSpy = new StreamSpy(message.Stream);
            xmlReader       = new XmlTextReader(readerStreamSpy);

            return(xmlReader);
        }
 void InitNotification(SoapClientMessage clientMessage)
 {
     if (clientMessage.Client is IProxyProgressExtension)
     {
         IProxyProgressExtension proxy = clientMessage.Client as IProxyProgressExtension;
         m_requestGuid = proxy.RequestGuid;
         GetContentLength(clientMessage, proxy);
         m_progressCallback = proxy.Callback;
     }
 }
示例#12
0
        protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
        {
            System.Xml.XmlReader   aReader = base.GetReaderForMessage(message, bufferSize);
            System.Xml.XmlDocument doc     = new System.Xml.XmlDocument();
            doc.Load(aReader);

            Response = doc.InnerXml;

            return(new XmlNodeReader(doc));
        }
示例#13
0
        /// <summary>
        /// Tries to get ITraceable instance
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        private ITraceable GetTraceable(SoapMessage message)
        {
            SoapClientMessage clientMessage = message as SoapClientMessage;

            if (clientMessage != null)
            {
                return(clientMessage.Client as ITraceable);
            }

            return(null);
        }
示例#14
0
        protected override XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize)
        {
            // Dispose previous writer stream spy.
            DisposeWriterStreamSpy();

            writerStreamSpy = new StreamSpy(message.Stream);
            // XML should always support UTF8.
            xmlWriter = new XmlTextWriter(writerStreamSpy, Encoding.UTF8);

            return(xmlWriter);
        }
示例#15
0
        protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
        {
            var reader = new XmlTextReader(new XmlSanitizingStreamReader(message.Stream))
            {
                ProhibitDtd   = true,
                Normalization = true,
                XmlResolver   = null
            };

            return(reader);
        }
        protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
        {
            XmlReader     readerForMessage = base.GetReaderForMessage(message, bufferSize);
            XmlTextReader xmlTextReader    = readerForMessage as XmlTextReader;

            if (xmlTextReader != null)
            {
                xmlTextReader.Normalization = false;
                xmlTextReader.DtdProcessing = DtdProcessing.Ignore;
                xmlTextReader.XmlResolver   = null;
            }
            return(new AutoDiscoverClientXmlReader(readerForMessage));
        }
示例#17
0
    // Write the contents of the outgoing SOAP message to the log file.
    public void WriteOutput(SoapClientMessage message)
    {
        newStream.Position = 0;
        FileStream   myFileStream   = new FileStream(filename, FileMode.Append, FileAccess.Write);
        StreamWriter myStreamWriter = new StreamWriter(myFileStream);

        myStreamWriter.WriteLine("=================================== Request at "
                                 + DateTime.Now);
        myStreamWriter.Flush();
        Copy(newStream, myFileStream);
        myFileStream.Close();
        newStream.Position = 0;
        Copy(newStream, oldStream);
    }
示例#18
0
    // Write the contents of the incoming SOAP message to the log file.
    public void WriteInput(SoapClientMessage message)
    {
        Copy(oldStream, newStream);
        FileStream   myFileStream   = new FileStream(filename, FileMode.Append, FileAccess.Write);
        StreamWriter myStreamWriter = new StreamWriter(myFileStream);

        myStreamWriter.WriteLine("---------------------------------- Response at "
                                 + DateTime.Now);
        myStreamWriter.Flush();
        newStream.Position = 0;
        Copy(newStream, myFileStream);
        myFileStream.Close();
        newStream.Position = 0;
    }
 /// <summary>
 /// Store the size of data to be processed.
 /// The way to obtain the size differs depending on whether we are sending or receiving data.
 /// * When we are reading from the web server, the web server reports the size in through the web response.
 /// * When we are sending data our stream has the size to be sent.
 /// </summary>
 /// <param name="clientMessage"></param>
 /// <param name="proxy"></param>
 void GetContentLength(SoapClientMessage clientMessage, IProxyProgressExtension proxy)
 {
     if (clientMessage.Stage == SoapMessageStage.BeforeDeserialize)
     {
         m_totalSize = proxy.ResponseContentLength;
     }
     else if (clientMessage.Stage == SoapMessageStage.AfterSerialize)
     {
         m_totalSize = clientMessage.Stream.Length;
     }
     else
     {
         m_totalSize = TotalSizeUnknown;
     }
 }
        void ReadFromWire(SoapMessage message)
        {
            SoapClientMessage clientMessage = message as SoapClientMessage;

            m_state = ProgressState.Retrieving;
            InitNotification(clientMessage);
            try
            {
                CopyStream(m_wireStream, m_applicationStream);
            }
            finally
            {
                m_applicationStream.Position = 0;
            }
        }
示例#21
0
        public void LogSoapRequestAfterSerialize(SoapClientMessage message)
        {
            newStream.Position = 0;

            var requestStr = new StreamReader(newStream, Encoding.UTF8).ReadToEnd();

            try
            {
                requestStr = XmlHelper.FormatXML(requestStr);
            }
            catch { }

            logger.Info(string.Format("SoapRequestAfterSerialize of the {2}:{1}{0}", requestStr, Environment.NewLine, message.MethodInfo.Name));

            newStream.Position = 0;
            Copy(newStream, oldStream);
        }
 protected override XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize)
 {
     if (this.Action != null)
     {
         message.Headers.Add(this.Action);
     }
     if (this.To != null)
     {
         message.Headers.Add(this.To);
     }
     if (this.OpenAsAdminOrSystemService != null)
     {
         this.OpenAsAdminOrSystemService.BudgetType          = 1;
         this.OpenAsAdminOrSystemService.BudgetTypeSpecified = true;
         message.Headers.Add(this.OpenAsAdminOrSystemService);
     }
     return(base.GetWriterForMessage(message, bufferSize));
 }
示例#23
0
        public override void ProcessMessage(SoapMessage message)
        {
            switch (message.Stage)
            {
            case SoapMessageStage.BeforeSerialize:
                break;

            case SoapMessageStage.AfterSerialize:
                newStream.Position = 0;
                Copy(newStream, oldStream);
                break;

            case SoapMessageStage.BeforeDeserialize:
                newStream.Position = 0;
                Copy(oldStream, newStream);

                newStream.Position = 0;
                //TextReader reader = new StreamReader(newStream);
                XElement xml = XElement.Load(newStream);


                if (message is SoapClientMessage)
                {
                    SoapClientMessage clientMessage = (SoapClientMessage)message;
                    if (clientMessage.Client is SoapService50Ex)
                    {
                        SoapService50Ex client = (SoapService50Ex)clientMessage.Client;
                        XNamespace      soap   = "http://schemas.xmlsoap.org/soap/envelope/";
                        client.headerInfo = xml.Element(soap + "Header").Element("equella");
                    }
                }

                newStream.Position = 0;
                break;

            case SoapMessageStage.AfterDeserialize:
                break;
            }
        }
        /// <summary>
        /// 客户端的调用时序是:
        /// BeforeSerilize
        /// AfterSerilize
        /// BeforeDeserialize
        /// AfterDeserialize
        /// </summary>
        /// <param name="message"></param>
        public override void ProcessMessage(SoapMessage message)
        {
            if (message is SoapClientMessage)
            {
                SoapClientMessage clientMessage = (SoapClientMessage)message;

                if (clientMessage.Stage == SoapMessageStage.BeforeSerialize)
                {
                    ServiceBrokerSoapHeader header = new ServiceBrokerSoapHeader();

                    T broker = GetSerivceBrokerContext();

                    header.UseServerCache = broker.UseServerCache;
                    header.TimePoint      = broker.TimePoint;

                    broker.ConnectionMappings.ForEach(mapping =>
                                                      header.ConnectionMappings.Add(new SoapHeaderConnectionMappingItem(mapping.Key, mapping.Value)));

                    broker.Context.ForEach(kp => header.Context.Add(new SoapHeaderContextItem(kp.Key, kp.Value)));

                    clientMessage.Headers.Add(header);
                }
            }
        }
 protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
 {
     soapClientMessage = message;
     responseXmlReader = base.GetReaderForMessage(soapClientMessage, bufferSize);
     return(responseXmlReader);
 }
示例#26
0
    // Write the contents of the outgoing SOAP message to the log file.
    public void WriteOutput(SoapClientMessage message)
    {
// <Snippet2>
// <Snippet3>
// <Snippet4>
// <Snippet5>
// <Snippet6>
        newStream.Position = 0;
        FileStream myFileStream = new FileStream(filename, FileMode.Append,
                                                 FileAccess.Write);
        StreamWriter myStreamWriter = new StreamWriter(myFileStream);

        myStreamWriter.WriteLine(
            "================================== Request at "
            + DateTime.Now);

        // Print to the log file the request header field for SoapAction header.
        myStreamWriter.WriteLine("The SoapAction Http request header field is: ");
        myStreamWriter.WriteLine("\t" + message.Action);

        // Print to the log file the type of the client that invoked
        // the XML Web service method.
        myStreamWriter.WriteLine("The type of the client is: ");
        if ((message.Client.GetType()).Equals(typeof(MathSvc)))
        {
            myStreamWriter.WriteLine("\tMathSvc");
        }

        // Print to the log file the method invoked by the client.
        myStreamWriter.WriteLine(
            "The method that has been invoked by the client is:");
        myStreamWriter.WriteLine("\t" + message.MethodInfo.Name);

        // Print to the log file if the method invoked is OneWay.
        if (message.OneWay)
        {
            myStreamWriter.WriteLine(
                "The client doesn't wait for the server to finish processing");
        }
        else
        {
            myStreamWriter.WriteLine(
                "The client waits for the server to finish processing");
        }

        // Print to the log file the URL of the site that provides
        // implementation of the method.
        myStreamWriter.WriteLine(
            "The URL of the XML Web service method that has been requested is: ");
        myStreamWriter.WriteLine("\t" + message.Url);
        myStreamWriter.WriteLine("The contents of the SOAP envelope are: ");
        myStreamWriter.Flush();

        // Copy the contents of one stream to another.
        Copy(newStream, myFileStream);
        myFileStream.Close();
        newStream.Position = 0;

        // Copy the contents of one stream to another.
        Copy(newStream, oldStream);
// </Snippet6>
// </Snippet5>
// </Snippet4>
// </Snippet3>
// </Snippet2>
    }
示例#27
0
 protected override XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize)
 {
     writer = new XmlWriterListener(base.GetWriterForMessage(message, bufferSize));
     return(writer);
 }
        protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
        {
            string xmlMatchSchema = "<?xml";
            string xmlSchema      = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
            int    schemaLength   = Encoding.UTF8.GetByteCount(xmlMatchSchema);
            Stream messageStream  = message.Stream;

            byte[] schemaArray = new byte[schemaLength];

            if (messageStream.CanSeek)
            {
                long originalPosition = messageStream.Position;

                messageStream.Seek(0, SeekOrigin.Begin);
                int bytesRead = messageStream.Read(schemaArray, 0, schemaArray.Length);

                string readSchema = Encoding.UTF8.GetString(schemaArray);
                if (readSchema.ToLowerInvariant() != xmlMatchSchema.ToLowerInvariant())
                {
                    messageStream.Seek(0, SeekOrigin.Begin);
                    byte[] content = new byte[messageStream.Length];
                    messageStream.Read(content, 0, content.Length);
                    messageStream.Seek(0, SeekOrigin.Begin);

                    string strContent = Encoding.UTF8.GetString(content);

                    MemoryStream newMemStream = new MemoryStream();
                    newMemStream.Seek(0, SeekOrigin.Begin);
                    newMemStream.Write(Encoding.UTF8.GetBytes(xmlSchema), 0, Encoding.UTF8.GetByteCount(xmlSchema));
                    newMemStream.Write(content, 0, content.Length);
                    newMemStream.Seek(0, SeekOrigin.Begin);

                    XmlTextReader reader   = null;
                    Encoding      encoding = (message.SoapVersion == SoapProtocolVersion.Soap12) ? RequestResponseUtils.GetEncoding2(message.ContentType) : RequestResponseUtils.GetEncoding(message.ContentType);
                    if (bufferSize < 0x200)
                    {
                        bufferSize = 0x200;
                    }

                    if (encoding != null)
                    {
                        reader = new XmlTextReader(new StreamReader(message.Stream, encoding, true, bufferSize));
                    }
                    else
                    {
                        reader = new XmlTextReader(message.Stream);
                    }
                    reader.ProhibitDtd   = true;
                    reader.Normalization = true;
                    reader.XmlResolver   = null;
                    return(reader);
                }
                else
                {
                    messageStream.Seek(originalPosition, SeekOrigin.Begin);
                    return(base.GetReaderForMessage(message, bufferSize));
                }
            }
            else
            {
                Trace.WriteLineIf(Settings.TraceSwitch.TraceWarning, "Unseekable stream returned with message, maybe the connection has terminated. Stream type: " + message.Stream.GetType().ToString());
                return(base.GetReaderForMessage(message, bufferSize));
            }
        }
示例#29
0
 /// <summary>Get Writer for Request</summary>
 protected override XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize)
 {
     DisposeWriterStreamSpy();
     return(StreamSpy.GetWriterForMessage(message, bufferSize, base.RequestEncoding, out WriterStreamSpy));
 }
示例#30
0
 /// <summary>Get Reader for Response</summary>
 protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
 {
     DisposeReaderStreamSpy();
     return(StreamSpy.GetReaderForMessage(message, bufferSize, out ReaderStreamSpy));
 }