Java 引用.net的 WCF 服务服务端接收到的参数总是为Null

仙剑 2015-03-21 04:47:02
小弟最近做一个Java调用WCF的测试,费了老半天的功夫,终于把Java客户端给生成了。
按照书上说的调用也没问题,可就是传不了参数,服务端接收到的参数总是Null。
我的WCF服务比较复杂,有大量自定义类型,但是我想既然客户端代理已经成功生成了,就基本大功告成了,没想到传参数又出了问题。
难道java不允许这种带自定义类型的参数的传递?求各位java老师指导直到。
我的WCF公开的服务契约时Service11012,公开一个方法叫做DoOperation。如下代码:

public class Service11012 : IService11012
{
public WebReturn DoOperation(WebRequest webRequest)
{
WebReturn webReturn = new WebReturn();
webReturn.Result = true;
webReturn.Code = 0;
if (webRequest == null)
{
webReturn.Result = false;
webReturn.Code = Defines.RET_PARAM_INVALID;
webReturn.Message = string.Format("WebRequest is null");
return webReturn;
}
SessionInfo session = webRequest.Session;
if (session == null)
{
webReturn.Result = false;
webReturn.Code = Defines.RET_PARAM_INVALID;
webReturn.Message = string.Format("SessionInfo is null");
return webReturn;
}
webReturn.Session = session;
try
{
OperationReturn optReturn;
switch (webRequest.Code)
{
case (int)RequestCode.WSGetLangList:
optReturn = GetLangList(session, webRequest.ListData);
if (!optReturn.Result)
{
webReturn.Result = false;
webReturn.Code = optReturn.Code;
webReturn.Message = optReturn.Message;
return webReturn;
}
webReturn.ListData = optReturn.Data as List<string>;
break;
default:
webReturn.Result = false;
webReturn.Code = Defines.RET_PARAM_INVALID;
webReturn.Message = string.Format("Request code invalid.\t{0}", webRequest.Code);
return webReturn;
}
webReturn.Message = optReturn.Message;
}
catch (Exception ex)
{
webReturn.Result = false;
webReturn.Code = Defines.RET_FAIL;
webReturn.Message = ex.Message;
return webReturn;
}
return webReturn;
}


其中DoOperation方法的参数是一个自定义的类型WebRequest,返回值也是一个自定义的类型WebReturn。
客户端调用如下:

/**
*
* @author Charley
*/
public class MyJavaApp {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try {
ObjectFactory factory = new ObjectFactory();
SessionInfo sessionInfo = new SessionInfo();
JAXBElement<String> str;
str = factory.createSessionInfoSessionID("abcd");
sessionInfo.setSessionID(str);
str = factory.createSessionInfoAppName("JavaClient");
sessionInfo.setAppName(str);
DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
sessionInfo.setLastActiveTime(datatypeFactory.newXMLGregorianCalendar(new GregorianCalendar()));

AppServerInfo appServerInfo = new AppServerInfo();
appServerInfo.setProtocol(factory.createAppServerInfoProtocol("http"));
appServerInfo.setAddress(factory.createAppServerInfoAddress("192.168.6.75"));
appServerInfo.setPort(8081);
appServerInfo.setSupportHttps(false);
appServerInfo.setSupportNetTcp(false);
sessionInfo.setAppServerInfo(factory.createAppServerInfo(appServerInfo));

DatabaseInfo databaseInfo = new DatabaseInfo();
databaseInfo.setTypeID(3);
databaseInfo.setTypeName(factory.createDatabaseInfoTypeName("ORCL"));
databaseInfo.setHost(factory.createDatabaseInfoHost("192.168.4.182"));
databaseInfo.setPort(1521);
databaseInfo.setDBName(factory.createDatabaseInfoDBName("PFOrcl"));
databaseInfo.setLoginName(factory.createDatabaseInfoLoginName("PFDEV"));
databaseInfo.setPassword(factory.createDatabaseInfoPassword("PF,123"));
sessionInfo.setDatabaseInfo(factory.createDatabaseInfo(databaseInfo));

WebRequest webRequest = new WebRequest();
webRequest.setSession(factory.createSessionInfo(sessionInfo));
webRequest.setCode(30001);
ArrayOfstring arrayOfstring = new ArrayOfstring();
arrayOfstring.getString().add("2052");
arrayOfstring.getString().add("");
arrayOfstring.getString().add("0");
arrayOfstring.getString().add("0");
arrayOfstring.getString().add("");
arrayOfstring.getString().add("");
webRequest.setListData(factory.createArrayOfstring(arrayOfstring));
WebReturn webReturn = doOperation(webRequest);
if (!webReturn.isResult()) {
System.out.println(webReturn.getMessage().getValue());
}

} catch (Exception e) {
System.out.println(e.getMessage());
}
}

private static WebReturn doOperation(Wcf11012.WebRequest webRequest) {
Wcf11012.Service11012 service = new Wcf11012.Service11012();
Wcf11012.IService11012 port = service.getBasicHttpBindingIService11012();
return port.doOperation(webRequest);
}

}

运行也没有报错,返回了 SessionInfo is null ,也就是方法已经调用成功了,只是SessionInfo的值没有传过去,不知道错在哪里呀。
...全文
205 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
仙剑 2015-03-24
  • 打赏
  • 举报
回复
啊,一个人都木有呀
仙剑 2015-03-21
  • 打赏
  • 举报
回复
客户端代码已经写了 webRequest.setSession(factory.createSessionInfo(sessionInfo)); SessionInfo已经在客户端赋值了,可是服务端怎么就接受不到呢,服务端WebRequest.Session是Null,奇怪

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧