日期:2014-05-17  浏览次数:20370 次

求助Web Service高手
我写了一个.net的Web service供java程式调用,有.net自定义对象传递。
自定义Class:
[Serializable]
public class E00900
{
  private string _autosend;
  public string autoSend
  {
  get
  {
  return _autosend;
  }
  set
  {
  _autosend = value;
  }
  }
  ......
}

web service 方法:
  [WebMethod]
  [SoapRpcMethod(Action= "http://tempuri.org/Test1", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")]
  public E00900 Test1(string str)
  {
  E00900 e900 = new E00900();
  e900.autoSend = str;
  return e900;

}

[SoapRpcMethod(Action= "http://tempuri.org/Test2", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")]
 public string Test2(E00900 e900)
 {
  return e900.autoSend;
 }
  
Test1方法是传递一个字符串返回E00900对象,Test2方法传递E00900对象返回字符串

用Java程式调用Test1方法是OK的,可以正常返回E00900对象,但是调用Test2方法就出问题了
Java程式Call Test2方法:

  String namespace = "http://tempuri.org/";// xmlns

  String methodName = "Test2";//方法名

  String soapActionURI = "http://tempuri.org/Test2"; //節點

  Service service = new Service();

  Call call = (Call) service.createCall();

  call.setTargetEndpointAddress(new java.net.URL(endpoint));

  QName qn = new QName("E00900");

   

  call.registerTypeMapping(E00900.class, qn,

  new org.apache.axis.encoding.ser.BeanSerializerFactory(E00900.class, qn),

  new org.apache.axis.encoding.ser.BeanDeserializerFactory(E00900.class, qn));

   

  call.setOperationName(new QName(namespace, methodName));

  call.setUseSOAPAction(true);

  call.setSOAPActionURI(soapActionURI);//设置SOAPAction
   

  E00900 e901 = new E00900();

  e901.setAutoSend("123");

   
  call.addParameter("e900", qn , ParameterMode.IN);

  call.setReturnType(XMLType.XSD_STRING);

  String ret = (String) call.invoke( new Object[] { e901 } );

  System.out.println( "result is " + ret + ".");


提示错误讯息"伺服器無法處理要求。 --> 物件型別不可以轉換成目標型別。"
请问这个是.Net Server端的问题还是Java Client端的问题?应该如何解决? 




------解决方案--------------------
你写个net的客户端,调用同样的函数,抓取soapmessage。
再让java客户端的的程序员把他发出的soapmessage给你,比较下应该就知道问题在哪里了。
------解决方案--------------------
可以这么调用吗?
不是有wcf可以跨语言调用,写wcf吧?一样的
------解决方案--------------------
既然你有怀疑了就去测试呀。照着思路去重新做一遍,确认一下是Server配置好了没有,如果配置好了在在JAVA里面测试能不能正确调用。或者设个断点单步调试下,看看到底是什么原因。祝你好运LZ!
------解决方案--------------------
跨语言间,不可以这样调用.
你用JAVA写的E00900类 != .NET写的E00900类

老老实实的使用基础数据类型吧.

既然是WebService,跨语言间的调用与传递就应该严格的使用XML,而不要去使用自定义类,即使要用,也应该序列化成XML进行传递,而不能直接去new XXX自定义类.这样就失去WebService的意义了.
------解决方案---------------