zoukankan      html  css  js  c++  java
  • Android调用WCF

    1. 构建服务端程序

      

    using System.ServiceModel;

    namespace yournamespace
    {
        [ServiceContract(Name = "HelloService", Namespace = "http://www.master.haku")]
        public interface IHello
        {
            [OperationContract]
            string SayHello();
        }
    }
    namespace YourNameSpace
    {
        public class YourService    
        {
          public string SayHello(string words)
          {
                return "Hello " + words;
          }
        }
    }

    2. 构建IIS网站宿主

      YourService.svc

    <%@ServiceHost Debug="true" Service="YourNameSpace.YourService"%>

      Web.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.serviceModel>
        <serviceHostingEnvironment>
          <serviceActivations >
            <add relativeAddress="YourService.svc" service="YourNameSpace.YourService"/>
          </serviceActivations >
        </serviceHostingEnvironment >

        <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBindingCfg" closeTimeout="00:01:00"
                openTimeout
    ="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                bypassProxyOnLocal
    ="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize
    ="524288" maxReceivedMessageSize="2147483647"
                messageEncoding
    ="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                allowCookies
    ="false">
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                  maxBytesPerRead
    ="4096" maxNameTableCharCount="16384" />
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                    realm
    ="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        
        <services>
          <service name="YourNameSpace.YourService" behaviorConfiguration="ServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:59173/YourService"/>
              </baseAddresses>
            </host>
            <endpoint binding="basicHttpBinding" contract="YourNameSpace.你的服务契约接口">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>
          </service>
        </services>

        <behaviors>
          <serviceBehaviors>
            <behavior name="ServiceBehavior">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
      <system.web>
        <compilation debug="true" />
      </system.web>
    </configuration>

    3. 寄宿服务

      把网站发布到web服务器, 指定网站虚拟目录指向该目录

      如果你能够访问http://你的IP:端口/虚拟目录/服务.svc

      那么,恭喜你,你的服务端成功了!

    4. 使用ksoap2调用WCF

      去ksoap2官网 

      http://code.google.com/p/ksoap2-android/ 下载最新jar

     

    5. 在Eclipse中新建一个Java项目,测试你的服务

      新建一个接口, 用于专门读取WCF返回的SoapObject对象

      ISoapService

    package junit.soap.wcf;

    import org.ksoap2.serialization.SoapObject;

    public interface ISoapService {
        SoapObject LoadResult();
    }

     

       HelloService

    package junit.soap.wcf;

    import java.io.IOException;
    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;
    import org.xmlpull.v1.XmlPullParserException;

    public class HelloService implements ISoapService {
        private static final String NameSpace = "http://www.master.haku";
        private static final String URL = "http://你的服务器/虚拟目录/你的服务.svc";
        private static final String SOAP_ACTION = "http://www.master.haku/你的服务/SayHello";
        private static final String MethodName = "SayHello";
        
        private String words;
        
        public HelloService(String words) {
            this.words = words;
        }
        
        public SoapObject LoadResult() {
            SoapObject soapObject = new SoapObject(NameSpace, MethodName);
            soapObject.addProperty("words", words);
            
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // 版本
            envelope.bodyOut = soapObject;
            envelope.dotNet = true;
            envelope.setOutputSoapObject(soapObject);
            
            HttpTransportSE trans = new HttpTransportSE(URL);
            trans.debug = true// 使用调试功能
            
            try {
                trans.call(SOAP_ACTION, envelope);
                System.out.println("Call Successful!");
            } catch (IOException e) {
                System.out.println("IOException");
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                System.out.println("XmlPullParserException");
                e.printStackTrace();
            }
            
            SoapObject result = (SoapObject) envelope.bodyIn;
            
            return result;
        }
    }

     

      测试程序

    package junit.soap.wcf;

    import org.ksoap2.serialization.SoapObject;

    public class HelloWcfTest {
        public static void main(String[] args) {
            HelloService service = new HelloService("Master HaKu");
            SoapObject result = service.LoadResult();
            
            System.out.println("WCF返回的数据是:" + result.getProperty(0));
        }
    }

      

       经过测试成功

       运行结果:

       Hello Master HaKu

    6. Android客户端测试

     

    package david.android.wcf;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    import org.ksoap2.serialization.SoapObject;

    public class AndroidWcfDemoActivity extends Activity {
        private Button mButton1;
        private TextView text;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mButton1 = (Button) findViewById(R.id.myButton1);
            text = (TextView) this.findViewById(R.id.show);

            mButton1.setOnClickListener(new Button.OnClickListener() {
                @Override
                public void onClick(View v) {
                    
                     HelloService service = new HelloService("Master HaKu");
                                    SoapObject result = service.LoadResult();

                    text.setText("WCF返回的数据是:" + result.getProperty(0));
                }
            });
        }
    }

    7. 最后运行结果

     

    技术改变世界
  • 相关阅读:
    微信二维码 场景二维码 用于推送事件,关注等 注册用户 ,经过测试
    简单的 Helper 封装 -- CookieHelper
    简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
    Java反射机制
    Windows Azure Web Site (13) Azure Web Site备份
    Windows Azure Virtual Machine (1) IaaS用户手册
    Windows Azure Web Site (1) 用户手册
    Windows Azure Web Site (12) Azure Web Site配置文件
    Windows Azure Web Site (11) 使用源代码管理器管理Azure Web Site
    Windows Azure Web Site (10) Web Site测试环境
  • 原文地址:https://www.cnblogs.com/davidgu/p/2504182.html
Copyright © 2011-2022 走看看