0

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>
4

1 に答える 1

0

最後に、問題を解決することができました。代替の .NET クライアントが正常に動作していたため、問題は Java コード内にあったようです。パラメータのプロパティが次のように誤って設定されました。

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

代わりに、正しいアプローチは

obj.setClient(fact.createMyObjectClient("Someone"));
于 2012-07-02T14:37:02.873 に答える