This article was translated by machine. To view in the article in English, select the English check box. You can also display the English text in a popup window by moving the mouse pointer over the text.
الترجمة
الأصلي
This documentation is archived and is not being maintained.

SoapExtension الفئة

Visual Studio 2010

The فئة الأساس for بروتوكول بروتوكول SOAP ملحقات for XML ويب الخدمات تاريخ الإنشاء using ASP.NET.

مساحة الاسم:  System.Web.Services.Protocols
التجميع:  System.Web.Services (في System.Web.Services.dll)

public abstract class SoapExtension

ASP.NET allows a بروتوكول بروتوكول SOAP-related infrastructure إلى be built بواسطة means of an التوافق مع البرامج الخارجية mechanism. The ASP.NET بروتوكول بروتوكول ملحق SOAP architecture revolves around an extension that can inspect أو تعديل a رسالة at specific stages في رسالة processing تشغيل either the العميل أو the الخادم.

ASP.NET بروتوكول بروتوكول SOAP ملحقات derive من the SoapExtension فئة. The GetInitializer و Initialize وظائف provide بديل mechanisms for initializing the بروتوكول بروتوكول ملحق SOAP إلى enhance الأداء. ProcessMessage هو the heart of most بروتوكول بروتوكول SOAP ملحقات, كـ the أسلوب هو called at each مرحلة defined في SoapMessageStage, allowing the بروتوكول بروتوكول ملحق SOAP إلى perform the desired سلوك of that specific بروتوكول بروتوكول ملحق SOAP. For بروتوكول بروتوكول SOAP ملحقات that need إلى تعديل the بروتوكول بروتوكول SOAP طلب أو بروتوكول بروتوكول SOAP استجابة, ChainStream provides an opportunity إلى receive the proposed بيانات إلى be sent عبر the wire.

The following TraceExtension بروتوكول بروتوكول ملحق SOAP مخرجات the بروتوكول بروتوكول SOAP طلب و بروتوكول بروتوكول SOAP استجابة إلى a specified ملف when applied إلى an XML ويب الخدمة أسلوب. في حالة تثبيت ملحق بروتوكول بروتوكول SOAP التالية لتشغيل باستخدام خدمة ويب XML، يجب أن يحتوي حساب المستخدم ASPNET إذن الكتابة إلى الدليل الذي يسجل كتابة الملف.


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;
			}
		}
	}


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

يتم تأمين العملية الجزئية لأي عضو عمومي ثابت (مشترك في Visual Basic) من هذا النوع. لن يتم ضمان تأمين العملية الجزئية لأي عضو مثيل.

نظام التشغيل Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, الإصدار x64 من نظام التشغيل Windows XP Professional, Windows XP Starter Edition, Windows Server 2008, نظام التشغيل Windows Server 2003, نظام التشغيل Windows Server 2000 المزود بحزمة الخدمة SP4, نظام التشغيل Windows Millennium Edition, نظام التشغيل Windows 98

لا يدعم .NET Framework و .NET Compact Framework كافة الإصدارات الخاصة بكل نظام أساسي. للحصول على قائمة بالإصدارات المدعمة، راجع متطلبات النظام إطار عمل .NET.

.NET Framework

مدعوم في: 4, 3.5, 3.0, 2.0, 1.1, 1.0

NET Framework. Client Profile

مدعوم في: 4
إظهار: