我有一个继承自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
:来自命名空间的名为''的XML元素已经存在于当前作用域中:
异常的堆栈跟踪是:
System.InvalidOperationException:死 ?????????????????????????????????????????。???????? ????????????????????????????????? - 了Methode kann nicht reflektiert werden。 ---> System.InvalidOperationException: Fehler beim Reflektieren von''。 ---> System.InvalidOperationException:Das XML-Attribut''im Namespace 'https://www.yyy/xxx/'bereits im aktuellen Bereich vorhanden。 Verwenden Sie XML-Attribute,um einen anderen XML-Namen oder-NamespacefürdasElement anzugeben。 bei System.Xml.Serialization.XmlReflectionImporter.AddUniqueAccessor(INameScope 范围,访问者访问者) bei System.Xml.Serialization.XmlReflectionImporter.AddUniqueAccessor(MemberMapping) 成员,INameScope元素,INameScope属性,布尔值 isSequence) bei System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember [] xmlReflectionMembers,String ns,Boolean hasWrapperElement,Boolean rpc,Boolean openModel,RecursionLimiter limiter)--- Ende der internenAusnahmestapelü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(字符串 elementName,String ns,XmlReflectionMember [] members,Boolean hasWrapperElement,Boolean rpc,Boolean openModel,XmlMappingAccess 访问) bei System.Web.Services.Protocols.SoapReflector.ImportMembersMapping(XmlReflectionImporter xmlImporter,SoapReflectionImporter soapImporter,Boolean serviceDefaultIsEncoded,Boolean rpc,SoapBindingUse使用, SoapParameterStyle paramStyle,String elementName,String elementNamespace,Boolean nsIsDefault,XmlReflectionMember []成员, Boolean validate,Boolean openModel,String key,Boolean writeAccess) bei System.Web.Services.Protocols.SoapReflector.ReflectMethod(LogicalMethodInfo) methodInfo,布尔客户端,XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter,String defaultNs)
答案 0 :(得分:2)
我发现了问题:
我使用Confuser(https://yck1509.github.io/ConfuserEx/)来保护应用程序,这导致了SoapHttpClientProtocol父类构造函数中的反射错误。
答案 1 :(得分:1)
如果您不使用对象XML序列化程序,我的猜测会有效。
那么,如果您的某个属性必须包含空闲字符串值并且不是XML编码,那该怎么办呢?如果它包含与XML构建器用于引用属性值相同的引用字符,那么您可能会收到类似XML注入的内容。
例如,你必须传递一个字符串[那就是我所说的"一个真正的问题"]。如果您不对字符串进行XML编码,那么您将拥有类似的东西,这意味着属性值在[a] char之前关闭,而从[a]到右边的所有内容都变成了XML指令,而我不会这样做。期望普通的XML解析器能够理解。
如果您使用XML编码的值,您将收到(如果您已经定义了"和'实体或其他代码),这是一个结构良好的XML。
尝试使用SoapUI (they have a free community edition)分析服务响应。