C# WebService调用Java WebService(返回自定义对象) ,为什么接收为null

时间:2023-01-24 19:32:36
SoapUI测试结果如下(左边是传的两个参数,右边是返回值):
C# WebService调用Java WebService(返回自定义对象) ,为什么接收为null

返回的translist是有内容的,但是在vs内调用却返回为null,如下图:
C# WebService调用Java WebService(返回自定义对象) ,为什么接收为null


返回的是userLocationTransform这个自定义类型,请教C#客户端这边怎么设置,怎样才能返回正常

5 个解决方案

#1


如果解决不了  请问我怎么通过vs的webservice方式获取到返回的XML  再去解析这个xml,这种是最笨的方法了   求大神指教

#2


呵呵,原因是你调用的webservice返回的response里面的根节点带前缀,其实你获得的hubian这个变量也是null,只不过因为是boolean的所以设了false为默认值。不信你让webservice返回个hubian是true的值试试。
这个东西无解。呵呵

不过如果你要手动解析的话可以实现一个Ihttpmodule,或者ashx,request.inputstream可以拿到整个soap的消息

#3


不好意思,看错了,你是客户端。
基本方法如下所示:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create("http://your.webservice.com/yourendpoint.xxx");
            try
            {
                //根据用户的输入设置请求对象的标题字段
                //httpRequest.ContentType = "application/soap+xml; charset=utf-8";
                httpRequest.ContentType = "text/xml; charset=utf-8";
                httpRequest.Headers.Add("SOAPAction", "http://xxxx.xxxx.com.xxxx/xxxx/yyyy");
                httpRequest.Method = "POST";
                byte[] req_soap = BuildSoap();// 构建SOAP形式的request,BuildSoap这部分你要自己实现,方法多种多样
                httpRequest.ContentLength = req_soap.GetLength(0);
                Stream rs = httpRequest.GetRequestStream();
                rs.Write(req_soap, 0, (int)(httpRequest.ContentLength));
                rs.Close();
            }
            catch (Exception ex)
            {
            }
            HttpWebResponse httpResponse;
            bool err = false;
            try
            {
                httpResponse = (HttpWebResponse)httpRequest.GetResponse();
            }
            catch (WebException ex)
            {
            }

            StreamReader stream = new StreamReader(httpResponse.GetResponseStream());
            string x = stream.ReadToEnd();  
            // 至此你得到了返回的SOAP消息的字符串,当然你也可以用DOM的read方法直接读httpResponse.GetResponseStream()

#4


谢谢3L   
1.请问第1和第7行的url有什么区别吗
2.对方的webservice需要传两个参数,用你说的这种方法怎么传

#5


第一行的URL是webservice的发布地址,比如.net的话一般是xxxx.asmx结尾的。
第七行的URL是soapaction,其实不一定一定是一个url,可以是任何字符串,这个是用来标示运行webservice里的哪个方法用的,但是不是必须的,要看webservice的服务器端是如何定义的,有些必须要soapaction,有些根据soapbody下的第一个子元素的名字来匹配
参数的问题,就是要按webservice服务器发布的wsdl自己组装soap消息,也就是前面代码里面BuildSoap要实现的东西。

#1


如果解决不了  请问我怎么通过vs的webservice方式获取到返回的XML  再去解析这个xml,这种是最笨的方法了   求大神指教

#2


呵呵,原因是你调用的webservice返回的response里面的根节点带前缀,其实你获得的hubian这个变量也是null,只不过因为是boolean的所以设了false为默认值。不信你让webservice返回个hubian是true的值试试。
这个东西无解。呵呵

不过如果你要手动解析的话可以实现一个Ihttpmodule,或者ashx,request.inputstream可以拿到整个soap的消息

#3


不好意思,看错了,你是客户端。
基本方法如下所示:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create("http://your.webservice.com/yourendpoint.xxx");
            try
            {
                //根据用户的输入设置请求对象的标题字段
                //httpRequest.ContentType = "application/soap+xml; charset=utf-8";
                httpRequest.ContentType = "text/xml; charset=utf-8";
                httpRequest.Headers.Add("SOAPAction", "http://xxxx.xxxx.com.xxxx/xxxx/yyyy");
                httpRequest.Method = "POST";
                byte[] req_soap = BuildSoap();// 构建SOAP形式的request,BuildSoap这部分你要自己实现,方法多种多样
                httpRequest.ContentLength = req_soap.GetLength(0);
                Stream rs = httpRequest.GetRequestStream();
                rs.Write(req_soap, 0, (int)(httpRequest.ContentLength));
                rs.Close();
            }
            catch (Exception ex)
            {
            }
            HttpWebResponse httpResponse;
            bool err = false;
            try
            {
                httpResponse = (HttpWebResponse)httpRequest.GetResponse();
            }
            catch (WebException ex)
            {
            }

            StreamReader stream = new StreamReader(httpResponse.GetResponseStream());
            string x = stream.ReadToEnd();  
            // 至此你得到了返回的SOAP消息的字符串,当然你也可以用DOM的read方法直接读httpResponse.GetResponseStream()

#4


谢谢3L   
1.请问第1和第7行的url有什么区别吗
2.对方的webservice需要传两个参数,用你说的这种方法怎么传

#5


第一行的URL是webservice的发布地址,比如.net的话一般是xxxx.asmx结尾的。
第七行的URL是soapaction,其实不一定一定是一个url,可以是任何字符串,这个是用来标示运行webservice里的哪个方法用的,但是不是必须的,要看webservice的服务器端是如何定义的,有些必须要soapaction,有些根据soapbody下的第一个子元素的名字来匹配
参数的问题,就是要按webservice服务器发布的wsdl自己组装soap消息,也就是前面代码里面BuildSoap要实现的东西。