如何根据Request.InputStream确定调用哪个WS方法?

时间:2012-01-19 10:04:10

标签: c# web-services inputstream httpmodule

在HttpModule中,我想弄清楚哪个Web方法被调用/拦截并根据它进行操作。例如,如果我调用了WebMethod1,那就做一些事情,但对WebMethod2什么都不做。

如果我看肥皂:Header和soap:Body,我可以看到方法名称,但是解析肥皂是否可以:信封,如果是,那么哪一部分?

2 个答案:

答案 0 :(得分:2)

如果两个方法都有一个公共端点,则需要解析SOAP消息以确定调用哪个方法。在这种情况下,您需要检查<soap:Body>标记并找到属于body标记的第一个元素名称的操作名称。

答案 1 :(得分:1)

这是解析soap消息的代码:

    System.Xml.XmlDocument doc=new System.Xml.XmlDocument();
    doc.LoadXml(soapMessage);

    foreach (XmlNode xn in doc)
    {
        foreach (XmlElement element in xn)
        {
            if (element.Name == "soap:Body")
                result = element.FirstChild.Name;
        }
    }

    return result;