使用javax.xml.ws.Endpoint公开Java web服务的限制?

使用javax.xml.ws.Endpoint公开Java web服务的限制?,java,.net,web-services,jax-ws,Java,.net,Web Services,Jax Ws,我正试图公开一些Java web服务,以便可以从C#进行互操作(参见此)。下面的概念验证代码非常适合WCF 我的问题是关于使用javax.xml.ws.Endpoint类发布我的服务: 走这条路,而不是一个成熟的应用服务器,我会失去什么 这是一个适合低呼叫量的长时间运行服务的解决方案吗 下面的代码生成WSDL,可以从.Net干净地调用,并且性能良好。我为什么不用它呢 通常,可伸缩性参数(线程池等)非常有力,但您已经忽略了这些 其次是可靠性。一些应用程序服务器具有良好的群集功能,非常容易添加新实例

我正试图公开一些Java web服务,以便可以从C#进行互操作(参见此)。下面的概念验证代码非常适合WCF

我的问题是关于使用
javax.xml.ws.Endpoint
类发布我的服务:

  • 走这条路,而不是一个成熟的应用服务器,我会失去什么
  • 这是一个适合低呼叫量的长时间运行服务的解决方案吗
  • 下面的代码生成WSDL,可以从.Net干净地调用,并且性能良好。我为什么不用它呢


    通常,可伸缩性参数(线程池等)非常有力,但您已经忽略了这些

    其次是可靠性。一些应用程序服务器具有良好的群集功能,非常容易添加新实例,因此在启用整合的管理视图的同时实现容错

    随着服务数量的增加,易于管理通常是非常方便的

    安全基础设施和声明性安全模型可能非常重要


    对我来说,当您的业务逻辑变得非常重要时,整个JavaEE编程模型是值得拥有的。现在我们可以进入整个EJBV Spring v。。。辩论但我想提出的一般观点是,随着业务逻辑变得越来越重要,您需要诸如线程管理、持久性、连接池、消息传递、缓存和调度等设施;你在应用服务器中找到的东西。其中一些是EJB3+JPA或Spring中自然产生的,另一些是作为应用服务器中的自然附加组件。如果您有机会进行真正的企业级Java开发,那么最好现在就购买稍微复杂一点的产品,以便为将来建立一个可扩展的基础。

    除了失去应用服务器的好处之外,如果要使用应用程序服务器,则可能会失去管理和测试服务的能力

    在互操作端,如果没有java调用,您将无法提取WSDL。如果您的新服务在发布时执行了某些操作,那么您可能需要围绕它进行设计。如果您计划使用WCF或类似的东西来使用WSDL,那么在生成服务客户机时,VS端有一些怪癖,您必须解决这些怪癖(这些怪癖不是每一代都会发生,但它们确实会不时发生)


    一个长期运行的服务(换句话说,我假设您指的是一个期望无限期运行的服务)必须作为一个进程进行管理。根据您的设计和需求,您必须考虑启动和停止流程、暂停流程等。

    您能否详细介绍一下这些WSDL怪癖?间歇的?听起来很可怕其中两项需要强调:1。从WSDL重新生成客户端时,VisualStudio似乎经常挂起。最终的结果是令人沮丧和耗时的,因为它需要您终止这个过程,稍微拆除您的解决方案,然后将其重新组合起来。这只需要10分钟左右,但这种情况经常发生,以至于每次你不得不重新生成时,你都会畏缩不前。问题肯定出在某个地方的一行代码中,但谷歌搜索会显示很多人都有相同的代码行。2.客户端将生成一个单独的类型。。。房间用完问题#2:客户机将使用其自己的WSDL对象个人副本生成。如果有两个服务在Java端返回相同的对象,C端将有两个单独的对象打包在不同的包中。因此,您将需要在C#端进行一些设计,以合理化如何在两个不同的包中使用相同的对象。谢谢-只要我们公开web服务的方式没有任何问题,我同意。我从未见过VS2008挂在WSDL上,但会密切关注它。我们处理#2的方法是使用IDE(或svcutil.exe)生成客户机类,然后手动将它们集成到我们的项目中。一旦web服务界面变得稳定,这就不需要做太多工作。我可以放弃应用程序服务器的一些功能,只要我们不会遇到任何与内置内容有关的问题。你所说的JEE编程模型是什么意思?(我是一个C#guy——这是企业级Java Beans吗?)
    @javax.jws.WebService
    public class TestSvc { 
        @javax.jws.WebMethod()
        public String sayHello() {
            return "Hello!";
        }
    }
    
    import javax.xml.ws.Endpoint;
    public class Main  {
        public static void main(String[] args) throws Exception {
            Endpoint.publish("http://localhost:8181/Test", new TestSvc());
        }
    }