Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original
Este tópico ainda não foi avaliado como - Avalie este tópico

Classe SoapExtension

A classe base para as extensões SOAP para XML Web services criados usando ASP.NET.

System.Object
  System.Web.Services.Protocols.SoapExtension

Namespace:  System.Web.Services.Protocols
Assembly:  System.Web.Services (em System.Web.Services.dll)
public abstract class SoapExtension

O tipo SoapExtension expõe os membros a seguir.

  NomeDescrição
Método protegidoSoapExtensionInicializa uma nova instância da classe SoapExtension.
Superior
  NomeDescrição
Método públicoChainStreamQuando substituído em uma classe derivada, permite um acesso de extensão SOAP para o buffer de memória que contém a solicitação SOAP ou resposta.
Método públicoEquals(Object) Verifica se o objeto especificado é igual ao objeto atual. (Herdado de Object.)
Método protegidoFinalize Permite que um objeto tente liberar recursos e executar outras operações de limpeza antes que ele seja recuperado pela coleta de lixo. (Herdado de Object.)
Método públicoGetHashCodeServe como uma função hash para um tipo específico. (Herdado de Object.)
Método públicoGetInitializer(Type)Quando substituído em uma classe derivada, permite que uma extensão SOAP inicializar dados específicos a uma classe de implementação de um XML Web Services em um custo de desempenho de tempo.
Método públicoGetInitializer(LogicalMethodInfo, SoapExtensionAttribute)Quando substituído em uma classe derivada, permite que uma extensão SOAP inicializar dados específicos para um método de XML Web service usando um atributo aplicado para o método XML Web service em um custo de desempenho de tempo.
Método públicoGetType Obtém o Type da instância atual. (Herdado de Object.)
Método públicoInitializeQuando substituído em uma classe derivada, permite que uma extensão SOAP ser inicializada usando os dados armazenados em cache o GetInitializer método.
Método protegidoMemberwiseCloneCria uma cópia superficial do Object atual. (Herdado de Object.)
Método públicoProcessMessageQuando substituído em uma classe derivada, permite que uma extensão SOAP receber um SoapMessage ao processo em cada SoapMessageStage.
Método públicoToStringRetorna uma string que representa o objeto atual. (Herdado de Object.)
Superior

ASP.NET permite que uma infra-estrutura relacionada ao SOAP a ser criado por meio de um mecanismo de extensibilidade. O ASP.Arquitetura de extensão SOAP NET gira em torno de uma extensão que pode inspecionar ou modificar uma mensagem em estágios específicos de processamento no cliente ou de servidor de mensagens.

ASP.Extensões SOAP NET derivam de SoapExtension classe. O GetInitializer e Initialize métodos fornecem mecanismos alternativos para inicializar a extensão SOAP para melhorar o desempenho. ProcessMessage é o coração da maioria das extensões SOAP, como o método é chamado em cada estágio definido em SoapMessageStage, permitindo que a extensão SOAP a executar o comportamento desejado de extensão SOAP específico. Para extensões SOAP que precise modificar a solicitação SOAP ou resposta SOAP, ChainStream oferece uma oportunidade para receber os dados propostos para serem enviados pela conexão.

O seguinte TraceExtension saídas de extensão SOAP a solicitação SOAP e a resposta SOAP em um arquivo especificado quando aplicado a um método XML Web service. Se a seguinte extensão SOAP é instalada para ser executado com um XML Web service, a conta de usuário do ASPNET deve ter permissão para gravar no diretório no qual o arquivo de log é gravado.


using System;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.IO;
using System.Net;

	// Define a SOAP Extension that traces the SOAP request and SOAP
	// response for the XML Web service method the SOAP extension is
	// applied to.

	public class TraceExtension : SoapExtension 
	{
		Stream oldStream;
		Stream newStream;
		string filename;

		// Save the Stream representing the SOAP request or SOAP response into
		// a local memory buffer.
		public override Stream ChainStream( Stream stream )
		{
			oldStream = stream;
			newStream = new MemoryStream();
			return newStream;
		}

		// When the SOAP extension is accessed for the first time, the XML Web
		// service method it is applied to is accessed to store the file
		// name passed in, using the corresponding SoapExtensionAttribute.	
		public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute) 
		{
			return ((TraceExtensionAttribute) attribute).Filename;
		}

		// The SOAP extension was configured to run using a configuration file
		// instead of an attribute applied to a specific XML Web service
		// method.
		public override object GetInitializer(Type WebServiceType) 
		{
			// Return a file name to log the trace information to, based on the
			// type.
			return "C:\\" + WebServiceType.FullName + ".log";    
		}

		// Receive the file name stored by GetInitializer and store it in a
		// member variable for this specific instance.
		public override void Initialize(object initializer) 
		{
			filename = (string) initializer;
		}

		//  If the SoapMessageStage is such that the SoapRequest or
		//  SoapResponse is still in the SOAP format to be sent or received,
		//  save it out to a file.
		public override void ProcessMessage(SoapMessage message) 
		{
			switch (message.Stage) 
			{
				case SoapMessageStage.BeforeSerialize:
					break;
				case SoapMessageStage.AfterSerialize:
					WriteOutput(message);
					break;
				case SoapMessageStage.BeforeDeserialize:
					WriteInput(message);
					break;
				case SoapMessageStage.AfterDeserialize:
					break;
			}
		}

		public void WriteOutput(SoapMessage message)
		{
			newStream.Position = 0;
			FileStream fs = new FileStream(filename, FileMode.Append,
				FileAccess.Write);
			StreamWriter w = new StreamWriter(fs);

			string soapString = (message is SoapServerMessage) ? "SoapResponse" : "SoapRequest";
			w.WriteLine("-----" + soapString + " at " + DateTime.Now);
			w.Flush();
			Copy(newStream, fs);
			w.Close();
			newStream.Position = 0;
			Copy(newStream, oldStream);
		}

		public void WriteInput(SoapMessage message)
		{
			Copy(oldStream, newStream);
			FileStream fs = new FileStream(filename, FileMode.Append,
				FileAccess.Write);
			StreamWriter w = new StreamWriter(fs);

			string soapString = (message is SoapServerMessage) ?
				"SoapRequest" : "SoapResponse";
			w.WriteLine("-----" + soapString + 
				" at " + DateTime.Now);
			w.Flush();
			newStream.Position = 0;
			Copy(newStream, fs);
			w.Close();
			newStream.Position = 0;
		}

		void Copy(Stream from, Stream to) 
		{
			TextReader reader = new StreamReader(from);
			TextWriter writer = new StreamWriter(to);
			writer.WriteLine(reader.ReadToEnd());
			writer.Flush();
		}
	}

	// Create a SoapExtensionAttribute for the SOAP Extension that can be
	// applied to an XML Web service method.
	[AttributeUsage(AttributeTargets.Method)]
	public class TraceExtensionAttribute : SoapExtensionAttribute 
	{

		private string filename = "c:\\log.txt";
		private int priority;

		public override Type ExtensionType 
		{
			get { return typeof(TraceExtension); }
		}

		public override int Priority 
		{
			get { return priority; }
			set { priority = value; }
		}

		public string Filename 
		{
			get 
			{
				return filename;
			}
			set 
			{
				filename = value;
			}
		}
	}


.NET Framework

Com suporte em: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte .Requisitos de sistema do NET Framework.
Quaisquer membros estático (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.
Isso foi útil para você?
(1500 caracteres restantes)

Contribuições da comunidade

ADICIONAR
© 2013 Microsoft. Todos os direitos reservados.