【问题标题】:WCF receives empty parameter consuming it through JavaWCF 通过 Java 接收使用它的空参数
【发布时间】:2012-07-02 11:11:46
【问题描述】:

我在尝试从 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>

【问题讨论】:

  • 能否请您也发布来自您的 WCF 服务的跟踪信息。还有从您的 Java 客户端发送的 SOAP 消息?
  • 我尝试向 WCF 服务添加一些跟踪,但我不确定如何正确执行它以及您期望什么信息。我在主帖中添加了 SOAP 消息。
  • 我现在看到的是 MyObject 的属性没有在 SOAP 主体中命名。我认为这是不正常的,因此我的知识有限。
  • 查看 WCF 诊断程序,它应该会告诉您问题出在哪里。而且您不再需要嗅探;)msdn.microsoft.com/en-us/library/ms733025.aspx
  • 试试codeproject.com/Articles/182406/…,在下面的一个你会得到一个有效的SOAP样本topologi.com/soapdemo

标签: java wcf interop java-metro-framework


【解决方案1】:

最后我设法解决了这个问题。似乎问题出在 Java 代码中,因为替代的 .NET 客户端工作正常。 参数的属性设置错误如下:

obj.setClient(fact.createString("Someone")); 

正确的做法是

obj.setClient(fact.createMyObjectClient("Someone"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 2012-06-09
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    相关资源
    最近更新 更多