SoapExtension不会执行

时间:2014-01-29 14:53:33

标签: .net web-services soap-extension

我有一个SoapExtension,目前只写一个日志:

public class CatchInputParametersExtension : SoapExtension
{
    public override object GetInitializer(Type serviceType)
    {
        return null;
    }

    public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
    {
        return null;
    }

    public override void Initialize(object initializer)
    {
        //nothing to do
    }

    public override void ProcessMessage(SoapMessage message)
    {
        Logger.Log("++++++++ Before Everything +++++++ " + message.ToString(), LogLevel.Info);

        switch (message.Stage)
        {
            case SoapMessageStage.BeforeSerialize:
                Logger.Log("++++++++ Before Serialize +++++++ " + message.ToString(), LogLevel.Info);
                break;
            case SoapMessageStage.AfterSerialize:
                Logger.Log("++++++++ After Serialize +++++++ " + message.ToString(), LogLevel.Info);
                break;
            case SoapMessageStage.BeforeDeserialize:
                Logger.Log("++++++++ Before Deserialize +++++++ " + message.ToString(), LogLevel.Info);
                break;
            case SoapMessageStage.AfterDeserialize:
                Logger.Log("++++++++ After Deserialize +++++++ " + message.ToString(), LogLevel.Info);
                break;
            default:
                throw new Exception("invalid stage");
        }

    }
}

我尝试使用web.config文件

进行注册
<webServices>
  <soapExtensionTypes>
    <add type="WebAdminServices.SoapExtensions.CatchInputParametersExtension,WebAdminServices" priority="1" group="Low"/>
  </soapExtensionTypes>
</webServices>

SoapExtensionAttribute

[AttributeUsage(AttributeTargets.Method)]
public class CatchInputParametersAttribute : SoapExtensionAttribute
{

    private int priority;

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

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

}

注册
    [WebMethod(Description = "Test1")]
    [CatchInputParametersAttribute(Priority=1)]
    public string Test1(int a, int b, int c)
    {
        // do stuff

        return stuff;
    }

但它们似乎都不起作用,日志文件从不显示那些++++++行。有什么提示吗?

1 个答案:

答案 0 :(得分:0)

好的,这有点傻。 SoapExtension工作正常,但我通过自动生成的HTTP Post调用了Web方法,认为SoapExtension正在下面执行。但事实并非如此。

因此,为了触发其执行,您需要直接使用SOAP请求通过客户端调用它。为此,我使用WebServiceStudio分析了给定的.wsdl,并允许您发出SOAP个请求。

更多信息:Using SOAP Extensions in ASP.NET