我在尝试从 Java 中使用 WCF 服务时遇到问题。WCF 使用 basicHttpBinding 和非常简单的定义:
public class MyService : IMyService
{
public int MyMethod(MyObject obj)
{
}
}
MyObject 仅包含 String 属性,如下所示:
[DataContract]
public class MyObject
{
[DataMember]
public String Client { get; set; }
....
}
现在在 Java 中,使用 Metro 库,我正在创建必要的类,如下所示:
wsimport -extension -keep -p com.myproject -Xnocompile http://localhost:3720/MyService.svc?wsdl
最后像这样消费它:
MyService service = new MyService();
IMyService soap = service.getBasicHttpBindingIMyService();
ObjectFactory fact = new ObjectFactory();
MyObject obj = new MyObject();
obj.setClient(fact.createString("Someone"));
soap.MyMethod(obj);
用 Fiddler 嗅探它,似乎数据已正确发送到包含 Client 属性的“Someone”值的服务。虽然在调试 WCF 服务时 Client 属性接收到 null 值。任何想法如何进行?
下面是 Java 客户端发送的 SOAP 消息:
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<MyMethod xmlns="http://tempuri.org/" xmlns:ns2="http://schemas.datacontract.org/2004/07/MyProject.MyService" xmlns:ns3="http://schemas.microsoft.com/2003/10/Serialization/">
<MyObject>
<ns3:string>Someone</ns3:string>
<ns3:string>123-456-789</ns3:string>
<ns3:string>Details</ns3:string>
<ns3:string>12345</ns3:string>
<ns3:string>Other</ns3:string>
<ns3:string>user</ns3:string>
<ns3:string>2012-01-01</ns3:string>
<ns3:string>Registered</ns3:string>
</MyObject>
</MyMethod>
</S:Body>
</S:Envelope>