0

尝试连接到 .Net Web 服务时出现以下错误

SoapFault - faultcode: 'q0:Security' faultstring: '不满足安全要求,因为传入消息中不存在安全标头。'

这是创建安全标头的服务器端代码

        public override XmlElement GetXml(XmlDocument document) {
        if (null == document) throw new ArgumentException("document");

        XmlElement root = document.CreateElement("abc", "TokenName", "http://testurl.com");

        if (!string.IsNullOrEmpty(Id)) {
            root.SetAttribute(WSUtility.Prefix, WSUtility.NamespaceURI);
            root.SetAttribute(WSUtility.AttributeNames.Id, WSUtility.NamespaceURI, Id);
        }

        XmlElement machineIdElement = document.CreateElement("abc", "machineId", "http://testurl.com");

        machineIdElement.InnerText = "060a5270-7ae7-11e2-b92a-0800200c9a66";

        root.AppendChild(machineIdElement);

        XmlElement inspectorIdElement = document.CreateElement("dac", "insId", "http://testurl.com");

        inspectorIdElement.InnerText = "dc0a5270-7ae7-11e2-b92a-0800200c9a66";

        root.AppendChild(inspectorIdElement);

        return root;
    }

有人可以告诉我如何根据上面的代码为 ksoap2 创建一个安全标头。感谢任何帮助

在此先感谢史蒂夫

4

1 回答 1

0

尝试这个.....

// create header
        Element[] header = new Element[1];
        header[0] = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","Security");
        header[0].setAttribute(null, "mustUnderstand","1");

        Element usernametoken = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "UsernameToken");
        usernametoken.setAttribute(null, "Id", "UsernameToken-1");
        header[0].addChild(Node.ELEMENT,usernametoken);

        Element username = new Element().createElement(null, "n0:Username");
        username.addChild(Node.IGNORABLE_WHITESPACE,"AJAY");
        usernametoken.addChild(Node.ELEMENT,username);

        Element pass = new Element().createElement(null,"n0:Password");
        pass.setAttribute(null, "Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
        pass.addChild(Node.TEXT, "hello");
        usernametoken.addChild(Node.ELEMENT, pass);
于 2013-02-21T08:02:10.107 回答