0

この問題を解決するために通常のチャネルを使用してきましたが、Android アプリから C# winforms アプリでホストされている WCF ライブラリにデータを正しく送信する方法を特定できないようです。

Visual Studio が提供する WCFClientTest アプリを使用してサービスが適切にホストされていることを確認しましたが、すべてがその目的で機能しています。この行を呼び出すと: androidHttpTransport.call(SOAP_ACTION, エンベロープ); Android アプリでハングしているように見える

このリンクをチュートリアルとして、WCF サービスを呼び出すために ksoap2 を使用しています。

Android コード

private static final String METHOD_NAME = "Alive";
    private static final String NAMESPACE = "http://tempuri.org/";
    private static final String SOAP_ACTION 
                               = "http://tempuri.org/IDeviceHealth/Alive";

    //10.0.2.2 is the ip address for the device simulator.
    private static final String URL = "http://192.168.1.8:8733/DeviceHealth/HealthService/mex"; 

    //SOAP must be  the same version as the webservice.
    private static final int SOAP_VERSION = SoapEnvelope.VER12;

public void OnClickGoBtn(View v)
    {
        try 
        {
         SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        SoapSerializationEnvelope envelope
                                     = new SoapSerializationEnvelope(SOAP_VERSION);
        envelope.dotNet = true;
            envelope.setOutputSoapObject(request);

        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

        androidHttpTransport.call(SOAP_ACTION, envelope);
        Object result = envelope.getResponse();

        String resultData = result.toString();
        Log.d("WCF Response", resultData);          
        } 
        catch (IOException e) 
        {
          Log.d("WCF IO Error", e.toString());
        }
        catch (XmlPullParserException e) 
        {
            Log.d("XML Pull Error",e.toString());
        }
        catch(Exception e)
        {
            Log.d("General Exception", e.toString());
        }
    }

C# サーバー:

 <behaviors>
      <serviceBehaviors>
        <behavior name="MetadataBehavior">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <services>
      <service name="DeviceHealthService.DeviceHealth" behaviorConfiguration="MetadataBehavior">

        <endpoint address=""
                  binding="netTcpBinding"
                  contract="DeviceHealthService.IDeviceHealth"/>

        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange"/>

        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:10001"/>
            <add baseAddress="http://localhost:10002"/>
          </baseAddresses>
        </host>

      </service>
    </services>

public string Alive()
        {
            return "I am running";
        }
4

1 に答える 1