Skip to main content
 首页 » 编程设计

c#之SOAP web 服务时出现 InvalidOperationException之但在开发机器上工作

2024年04月17日4598°冷暖

我有一个继承自 SoapHttpClientProtocol 的网络服务类

[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: The XML element named '' from namespace” from namespace is already present in the current范围:

异常的堆栈跟踪是:

System.InvalidOperationException: Die ?????????????????????????????????????????.?????????????????????????????????????????-Methode kann nicht reflektiert werden. ---> System.InvalidOperationException: Fehler beim Reflektieren von ''. ---> System.InvalidOperationException: Das XML-Attribut '' im Namespace 'https://www.yyy/xxx/' ist bereits im aktuellen Bereich vorhanden. Verwenden Sie XML-Attribute, um einen anderen XML-Namen oder -Namespace für das Element anzugeben. bei System.Xml.Serialization.XmlReflectionImporter.AddUniqueAccessor(INameScope scope, Accessor accessor) bei System.Xml.Serialization.XmlReflectionImporter.AddUniqueAccessor(MemberMapping member, INameScope elements, INameScope attributes, Boolean isSequence) bei System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, RecursionLimiter limiter) --- Ende der internen Ausnahmestapelüberwachung --- bei System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, RecursionLimiter limiter) bei System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(String elementName, String ns, XmlReflectionMember[] members, Boolean hasWrapperElement, Boolean rpc, Boolean openModel, XmlMappingAccess access) bei System.Web.Services.Protocols.SoapReflector.ImportMembersMapping(XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, Boolean serviceDefaultIsEncoded, Boolean rpc, SoapBindingUse use, SoapParameterStyle paramStyle, String elementName, String elementNamespace, Boolean nsIsDefault, XmlReflectionMember[] members, Boolean validate, Boolean openModel, String key, Boolean writeAccess) bei System.Web.Services.Protocols.SoapReflector.ReflectMethod(LogicalMethodInfo methodInfo, Boolean client, XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, String defaultNs)

请您参考如下方法:

我发现了问题:

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