none
.net调用java的web service出问题 RRS feed

  • 问题

  • /// <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~~~
    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
    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~~~
    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
    2010年4月11日 13:02
    版主