积极答复者
.net调用java的web service出问题

问题
-
/// <remarks/> [System.Web.Services.Protocols.SoapHeaderAttribute("sendAddress")] [System.Web.Services.Protocols.SoapHeaderAttribute("msgName")] [System.Web.Services.Protocols.SoapHeaderAttribute("version")] [System.Web.Services.Protocols.SoapHeaderAttribute("transactionID")] [System.Web.Services.Protocols.SoapHeaderAttribute("timeStamp")] [System.Web.Services.Protocols.SoapHeaderAttribute("originalAddress")] [System.Web.Services.Protocols.SoapHeaderAttribute("destAddress")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace = "http://www.chinamobile.com/vgop/serviceorder/v1_0", ResponseNamespace = "http://www.chinamobile.com/vgop/serviceorder/v1_0", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] [return: System.Xml.Serialization.XmlElementAttribute("syncOrderRelationResp")] public SyncOrderRelationResp syncOrderRelation(SyncOrderRelationReq syncOrderRelationReq) { object[] results = this.Invoke("syncOrderRelation", new object[] { syncOrderRelationReq}); return ((SyncOrderRelationResp)(results[0])); }
是我写的java web service,然而在java web service的方法中参数是8个,我把最后的7个参数放在了头部,而用.net添加Web引用生成代理类的方法为syncOrderRelation中参数只有一个(上面就是),放在头部的参数都定义为:[System.Web.Services.Protocols.SoapHeaderAttribute("destAddress")]
了。而且这个参数类型还不是我想要的类型(是SyncOrderRelationReq 的上上级类),谁知道的,帮忙呀,谢了先!2010年4月8日 2:02
答案
-
你好 对于不同的系统Web Services 相互调用 建议参数采用string类型
比如我以前参与过的一个电信的项目,我们系统需要调用对方的接口 对方平台是java,给我们的接口是web service 然后参数只有一个为stirng类型 返回给我们的也是string类型的
当然string不是简单的字符串 而是xml格式的 这样以后接口需要增加字段或者添加新的类型 都不需要重新引用 就可以很方便的进行处理了
Memory all alone in the moonlight~My Blog in .NET~~~- 已标记为答案 KeFang Chen 2010年4月14日 6:14
2010年4月11日 3:41 -
你现在在线吗?
一起讨论一下,
你Java写的Web服务,最后发布出来以后其实和Java没什么关系的,WSDL描述的也是符合Web服务标准的信息。
你这里把参数放在SOAPHeader 里其实有问题。
[System.Web.Services.Protocols.SoapHeaderAttribute("timeStamp")]
看到了吗?这个是放在SoapHeaderAttribute,也就是属性里,元素属性里。
默认的参数是作为SOAP Body的一部分的,没记错的话,应该是Body里的一个元素节点。
你.NET里生成的代理类应该只能控制方法参数,也就是Body的内容,所以你才看到一个参数。
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum- 已标记为答案 KeFang Chen 2010年4月14日 6:14
2010年4月11日 13:02
全部回复
-
你好 对于不同的系统Web Services 相互调用 建议参数采用string类型
比如我以前参与过的一个电信的项目,我们系统需要调用对方的接口 对方平台是java,给我们的接口是web service 然后参数只有一个为stirng类型 返回给我们的也是string类型的
当然string不是简单的字符串 而是xml格式的 这样以后接口需要增加字段或者添加新的类型 都不需要重新引用 就可以很方便的进行处理了
Memory all alone in the moonlight~My Blog in .NET~~~- 已标记为答案 KeFang Chen 2010年4月14日 6:14
2010年4月11日 3:41 -
你现在在线吗?
一起讨论一下,
你Java写的Web服务,最后发布出来以后其实和Java没什么关系的,WSDL描述的也是符合Web服务标准的信息。
你这里把参数放在SOAPHeader 里其实有问题。
[System.Web.Services.Protocols.SoapHeaderAttribute("timeStamp")]
看到了吗?这个是放在SoapHeaderAttribute,也就是属性里,元素属性里。
默认的参数是作为SOAP Body的一部分的,没记错的话,应该是Body里的一个元素节点。
你.NET里生成的代理类应该只能控制方法参数,也就是Body的内容,所以你才看到一个参数。
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum- 已标记为答案 KeFang Chen 2010年4月14日 6:14
2010年4月11日 13:02