0

私はWCFサービスにまったく慣れていません。複合型を WCF サービスに渡す方法がわかりません。

public class MainActivity extends Activity implements OnClickListener {
SoapObject result;
Button b;
private static String NAMESPACE = "http://tempuri.org/";
private static String METHOD_NAME = "InsertData";
private static String SOAP_ACTION = "http://tempuri.org/IWCFMasterTable/InsertData";
private static String URL = "http://172.16.0.1:55355/WCFMasterTable.svc";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    if (v.getId() == R.id.button1) {
        MyClass MC = new MyClass(MainActivity.this);
        MC.execute("");
    }
}

class MyClass extends AsyncTask<String, Void, SoapObject> {
    JSONObject jobj;
    MainActivity activity;

    public MyClass(MainActivity activity) {
        this.activity = activity;
    }

    @Override
    protected SoapObject doInBackground(String... params) {
        try {
            ClsMasterTable ct = new ClsMasterTable();
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            ct = ct.getData();
            System.out.println(ct.TableID);
            request.addProperty("args", ct);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER12);
            envelope.setOutputSoapObject(request);
            envelope.dotNet = true;
            HttpTransportSE transport = new HttpTransportSE(URL);
            try {
                transport.call(SOAP_ACTION, envelope);
            } catch (Exception e) {
                e.printStackTrace();
            }

            SoapFault fault = (SoapFault) envelope.bodyIn;
            System.out.println("Fault : " + fault.toString());
            result = (SoapObject) envelope.bodyIn;
            System.out.println("result : " + result);
        } catch (Exception e) {
            System.out.println("Exception : " + e.toString());
        }
        return result;
    }

    @Override
    protected void onPostExecute(SoapObject result) {
        super.onPostExecute(result);
    }
}
}

public class ClsMasterCaseType {
String ID, Name, Mark;

public ClsMasterCaseType getData() {
    Mark= "88";
    ID = "CTYPAAAA0005";
    Name= "Karthik";
    return this;
}
}

このようにして、複合型を渡そうとしました。しかし、これは次の例外をスローします

08-08 12:53:42.376: W/System.err(7845): java.lang.RuntimeException: Cannot serialize: 

com.elintsys.wcfservice.ClsMasterCaseType@40fcbdf0
08-08 12:53:42.376: W/System.err(7845):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:687)
08-08 12:53:42.376: W/System.err(7845):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:671)
08-08 12:53:42.386: W/System.err(7845):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:640)
08-08 12:53:42.386: W/System.err(7845):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:624)
08-08 12:53:42.386: W/System.err(7845):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:681)
08-08 12:53:42.386: W/System.err(7845):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:597)
08-08 12:53:42.386: W/System.err(7845):     at org.ksoap2.transport.Transport.createRequestData(Transport.java:101)

石鹸リクエストでオブジェクトを渡す方法私もこの方法を試しました。友達を助けてください。私はこれのために 3 日間を無駄にしました。前もって感謝します。

4

1 に答える 1

0

私はあなたのコードにいくつかの変更を加えました。

1)

SoapSerializationEnvelope Envelope = new SoapSerializationEnvelope( SoapEnvelope.VER12);

着替える

SoapSerializationEnvelope エンベロープ = 新しい SoapSerializationEnvelope(SoapEnvelope.VER11);

2)

SoapObject 応答 = (SoapObject) エンベロープ.bodyIn;

着替える

SoapPrimitive レスポンス = (SoapPrimitive)envelope.getResponse();

于 2013-08-08T08:26:53.323 に答える