当SOAP web服务-但在开发机器上工作时,InvalidOperationException

本文关键字:机器 工作 InvalidOperationException 开发 web SOAP 服务 | 更新日期: 2023-09-27 18:14:55

我有一个继承自SoapHttpClientProtocol的webservice类

[WebServiceBinding(Name = "gp_ws_mySoap", Namespace = "https://www.xxx/yyy/")]
internal class WebserviceNestle : SoapHttpClientProtocol
{
    public WebserviceNestle(string sUrl) : base()
    {
        Url = sUrl;
    }
    [SoapDocumentMethod("https://www.xxx/yyy/test",
    RequestNamespace = "https://www.xxx/yyy/",
    ResponseNamespace = "https://www.xxx/yyy/",
    Use = SoapBindingUse.Literal,
    ParameterStyle = SoapParameterStyle.Wrapped)]
    public XmlNode test(string a, int b)
    {
        var results = Invoke("test", new object[] {
            a,
            b
        });
        return (XmlNode)results[0];
    }
}

在我的开发机器上,webservice调用工作,但是在生产中,我得到异常"System.InvalidOperationException:命名为"from namespace"的XML元素来自namespace已经存在于当前作用域中:

异常的堆栈跟踪是:

系统。InvalidOperationException:死?????????????????????????????????????????.?????????????????????????????????????????方法康恩晚上反映了他的想法。——>系统。InvalidOperationException:"费勒海姆反射"。--->系统。InvalidOperationException: Das xml - attribute " im命名空间'https://www.yyy/xxx/' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'vorhanden。Verwenden Sie XML-Attribute,即XML-Namenorder -Namespace f元素。贝System.Xml.Serialization.XmlReflectionImporter.AddUniqueAccessor (INameScope作用域(scope)贝System.Xml.Serialization.XmlReflectionImporter.AddUniqueAccessor (MemberMapping成员,INameScope元素,INameScope属性,布尔值isSequence)贝System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping (XmlReflectionMember []xmlReflectionMembers, String ns, Booleanrpc,布尔openModel,递归限制器,限制器)——结束[au:]贝System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping (XmlReflectionMember []xmlReflectionMembers, String ns, Booleanrpc,布尔openModel,递归限制器,限制器)System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(字符串elementName, String ns, XmlReflectionMember[] members,布尔值hasWrapperElement, Boolean rpc, Boolean openModel, XmlMappingAccess访问)贝System.Web.Services.Protocols.SoapReflector.ImportMembersMapping (XmlReflectionImporterSoapReflectionImporter soapImporter, BooleanserviceDefaultIsEncoded, Boolean rpc, SoapBindingUse使用,SoapParameterStyle paramStyle, String元素名称,StringnsIsDefault, XmlReflectionMember[]Boolean验证,Boolean openModel, String key, Boolean writeAccess贝System.Web.Services.Protocols.SoapReflector.ReflectMethod (LogicalMethodInfomethodInfo, Boolean客户端,XmlReflectionImporter, xmllimporter,SoapReflectionImporter soapImporter, String defaultNs)

当SOAP web服务-但在开发机器上工作时,InvalidOperationException

我发现问题了:

我使用了Confuser (https://yck1509.github.io/ConfuserEx/)来保护应用程序,这导致了SoapHttpClientProtocol父类构造函数中的反射错误。

如果您不使用对象XML序列化器,我的猜测是有效的。

那么,如果您的一个属性必须包含一个自由字符串值并且不是xml编码的,该怎么办呢?如果它包含与XML构建器用于"属性值"的相同的引号字符,那么您可能会收到类似XML注入的东西。

例如,你必须传递一个字符串[这就是我所说的"真正的问题"]。如果你不对字符串进行XML编码,你会有这样的东西,这意味着属性值在[a]字符之前关闭,从[a]到右边的所有内容都成为XML指令,我不希望普通的XML解析器理解。

如果你使用XML编码的值,你会收到一个格式良好的XML(如果你定义了" and "实体或它们的代码)。

尝试使用SoapUI(他们有免费的社区版)来分析服务响应。

相关文章: