从Java使用.net WCF服务

我是Java的新手,并且认为在我已经熟悉的.NET WCF服务之上实现客户端应用程序是一个很好的学习练习。

我从最新的JAX-WS( https://jax-ws.java.net/ )运行wsimport.bat来生成客户端代理,但是我仍然坚持认证部分。 WCF服务使用应用程序级别用户名/密码进行身份validation。 我不知道在哪里提供凭证。

在C#中,对于此WCF服务,我只需要添加服务引用,并执行以下操作:

var client = new ServiceClient(); client.ClientCredentials.UserName.UserName = "username"; client.ClientCredentials.UserName.Password = "password"; client.DoSomething(); 

从Fiddler,调用client.DoSomething()会产生以下请求:

      2013-05-20T01:34:28.353Z 2013-05-20T01:39:28.353Z   username password        

这是我目前正在使用的Java:

 SomeService service = new SomeService(); ISomeService port = service.getBasicHttpBindingISomeService(); DoSomethingResponse response = port.getDoSomething(); 

这会产生以下请求:

       

它缺少安全节点,因此我不确定如何在Java端设置它。 我错过了什么?

我不是百分之百地使用JAX-WS,如果有更好的替代方案来满足我的需求。 但是,无法修改WCF服务以重新配置,因为它无法实现。

WSDL:

                                                                           

我在Windows 8 x64上使用最新的JDK

您需要从Java客户端创建自定义CallbackHandler。 我不是Java方面的专家,但我知道我的一些客户使用Metro库与我的WCF Web服务进行通信。

尝试搜索创建带/不带Metro库的CallbackHandler。

您可以从这里下载Metro库 。

我建议的一个例子 。