Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > Web Service Extension не вызывается


Автор: Bogdan1024 29.10.2008, 15:00
Код

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data.SqlClient;
using System.Web.Services.Description;
using System.Xml;
[WebService(Name = "MyWebService", Description = "This web service is used to experi,ment with some of the Web service concepts.", Namespace = "http://www.mycompany.com")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class MyWebService : System.Web.Services.WebService
{
    [CustomSoapExtension.TestSoapExtension()]
    [WebMethod()]
    public string HelloWorld()
    {
        return "Hello, World!";
    }
}


Код

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Services.Protocols;
using System.IO;

namespace CustomSoapExtension
{
    public class CustomSoapExtension : SoapExtension
    {
        System.IO.Stream OldStream;
        System.IO.Stream NewStream;
        public override object GetInitializer(Type serviceType)
        {
            return null;
        }
        public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
        {
            return null;
        }

        public override void Initialize(object initializer)
        {
            
        }

        public override void ProcessMessage(SoapMessage message)
        {
            System.IO.Stream s = message.Stream;
            string mt = (message.GetType() == typeof(SoapServerMessage)) ? "Server Message" : "Client Message";
            switch (message.Stage)
            {
                case SoapMessageStage.BeforeSerialize:
                    s.Seek(0, SeekOrigin.Begin);
                    WriteToLog("Before Serialize: (" + mt + ")", s);
                    s.Seek(0, System.IO.SeekOrigin.Begin);
                    break;
                case SoapMessageStage.AfterDeserialize:
                    break;
                case SoapMessageStage.BeforeDeserialize:
                    s.Seek(0, SeekOrigin.Begin);
                    WriteToLog("Before Deserialize: (" + mt + ")", s);
                    s.Seek(0, SeekOrigin.Begin);
                    break;
                case SoapMessageStage.AfterSerialize:
                    break;
            }
        }
        private void WriteToLog(string t, Stream s)
        {
            StreamReader sr = new StreamReader(s);
            Settings1 s1 = new Settings1();
            StreamWriter sw = new StreamWriter(s1.LoggingFile, true);
            sw.Write("**** " + t + "\r\n" + sr.ReadToEnd() + "\r\n\r\n");
            sw.Close();
        }
        public override System.IO.Stream ChainStream(System.IO.Stream stream)
        {
            this.NewStream = stream;
            this.OldStream = new System.IO.MemoryStream();
            return this.OldStream;
        }
    }
}

Код

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Services.Protocols;

namespace CustomSoapExtension
{
    [AttributeUsage(AttributeTargets.Method)]
    public class TestSoapExtensionAttribute    : SoapExtensionAttribute
    {

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

        public override int Priority
        {
            get {return 1;}
            set{}
        }
    }
}

Так вот, при вызове метода веб-сервиса HelloWorld WebServiceExtension судя по всему не вызывается. Ничего не пишется в файл. Дебагер не останавлияется на брэйкпойнтах в процедуре "Process". Почему?

Автор: Bogdan1024 2.11.2008, 15:53
Исправил. Как - не помню smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)