将WCF引用添加到j2me项目

时间:2009-07-06 22:11:16

标签: java wcf java-me

我有一个wcf服务,我想从j2me应用程序(黑莓)消费。

我一直在疯狂,因为用于消费Web服务的j2SE工作正常的工具对j2me来说效果不佳。至少不是我的服务。

我找到了一个有用的教程 http://www.netbeans.org/kb/60/mobility/mobile-dilbert.html

虽然它使用旧的asmx服务样式来解释它。我能够按照步骤使用我的wcf参考,我能够建立连接。

缺点是,此解决方案使用j2ee代理来获取工作的引用。

这是解决.net和java之间不兼容问题的方法吗? 我读到,发生这种情况的一个重要原因是Microsoft为服务生成非标准的wsdl文件。

我的问题是:这是一般用于从java消费.net网络服务的解决方案,还是有更好的方法? 任何参考指针将不胜感激。

5 个答案:

答案 0 :(得分:1)

首先,您是否将WCF服务配置为使用basicHttpBinding?

其次,在数据协定中仅使用本机数据类型(strings,int,bool等)。不要使用像DateTime这样的.NET对象。这就是我在开发MIDLet Twitter应用程序时所做的事情,该应用程序调用WCF服务来获取朋友更新,发布推文等...哦,我也使用了Wireless Toolkit(v 2.5.2)stubgenerator创建客户端。即使WCF的wsdl具有外部导入(wsdl:import和xsd:import),它也没有创建客户端的任何问题

答案 1 :(得分:0)

塞巴斯蒂安,

我听到的关于非标准Microsoft WSDL的唯一抱怨是抱怨WSDL不平坦。也就是说,一个WSDL可以引用另一个WSDL或另一个文件中定义的XML模式。有些平台无法处理。特别是,我记得有一个这样的抱怨来自于进行智能设备开发的人。我不记得是不是j2me。

没有什么特别要做的。 ASMX服务是非常基本的旧式SOAP服务; WCF还支持WS- *标准。但他们都应该很好地一起玩。

当你无法使用j2me时,你能说出你遇到的问题吗?请发布所有异常,错误消息等。希望任何需要从Java转换为.NET的内容,我都能得到一些帮助。

答案 2 :(得分:0)

感谢两位回答的人,在做进一步研究时给了我一些思考的东西。

由于这个问题没有明确答案,或许我不清楚,并在从其他来源调查这个问题后。我决定发布我发现的内容。

查看最基本的WCF服务,有一个方法,返回一个字符串。没有其他方法。添加引用时出错。

JSR-172不理解guid(消息的概念不是实际消息)。 对于char和持续时间也是如此。

我进一步阅读并在microsoft非标准wsdl文件中找到了引用,并且通过实现某些接口,您可以从生成的wsdl文件中删除所有非标准模式引用。

这有助于提供简单的服务,而不是复杂的服务。

我尝试了现有服务,我决定使用amazon.com联盟服务进行测试。

与我的wcf服务类似的错误,它提供了一个它不喜欢的类型的完整列表。

最后我学会了。视觉工作室会破坏你并让你变得懒惰(并不总是坏事)。我想要一种方法来使用某种向导类型工具,输入引用并获取大量生成的代码来调用我的服务,给出我要处理的对象和调用方法。

Netbeans为J2SE而不是j2me为我做了这个。

如果要直接将WCF用于j2me项目,请准备好为其编写所有管道代码。

或者,您可以使用建议的使用j2ee代理的方法。正如http://www.netbeans.org/kb/60/mobility/mobile-dilbert.html

中所述

使用此方法,您仍需要注意所使用的数据类型。有些导致服务失败或无法使用。例如,我有一个方法返回一个日期时间,netbeans甚至不让我选择该方法来生成存根。并且在服务中使用该方法调用方法会导致抛出异常。 (删除方法并调用成功)

答案 3 :(得分:0)

之前已经说过,但让JSR172 Web服务工作的诀窍是保持模式真的很简单(基本数据类型和字符串)。避免使用复杂的对象,也不要为字符串传递空值(使用空字符串)。

答案 4 :(得分:0)

我也遇到了这个错误(不理解简单类型,字符等) 事实证明,当您使用VS自动生成wsdl时,它会创建它,以及对类型的外部引用(在模式文件中定义)。 即使您只使用字符串,bool等类型,它也会生成类似于使用char的类型的引用列表,以及您看到J2ME客户端生成器抱怨的其他类型。 我接受了生成的wsdl并删除了对模式的引用,引用了我没有使用的类型并且它有效。