• 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

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <configuration>
     3   <system.serviceModel>
     4     <serviceHostingEnvironment>
     5       <serviceActivations >
     6         <add relativeAddress="YourService.svc" service="YourNameSpace.YourService"/>
     7       </serviceActivations >
     8     </serviceHostingEnvironment >
     9 
    10     <bindings>
    11       <basicHttpBinding>
    12         <binding name="BasicHttpBindingCfg" closeTimeout="00:01:00"
    13             openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
    14             bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
    15             maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
    16             messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
    17             allowCookies="false">
    18           <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
    19               maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    20           <security mode="None">
    21             <transport clientCredentialType="None" proxyCredentialType="None"
    22                 realm="" />
    23             <message clientCredentialType="UserName" algorithmSuite="Default" />
    24           </security>
    25         </binding>
    26       </basicHttpBinding>
    27     </bindings>
    28     
    29     <services>
    30       <service name="YourNameSpace.YourService" behaviorConfiguration="ServiceBehavior">
    31         <host>
    32           <baseAddresses>
    33             <add baseAddress="http://localhost:59173/YourService"/>
    34           </baseAddresses>
    35         </host>
    36         <endpoint binding="basicHttpBinding" contract="YourNameSpace.你的服务契约接口">
    37           <identity>
    38             <dns value="localhost" />
    39           </identity>
    40         </endpoint>
    41       </service>
    42     </services>
    43 
    44     <behaviors>
    45       <serviceBehaviors>
    46         <behavior name="ServiceBehavior">
    47           <serviceMetadata httpGetEnabled="true" />
    48           <serviceDebug includeExceptionDetailInFaults="true" />
    49         </behavior>
    50       </serviceBehaviors>
    51     </behaviors>
    52   </system.serviceModel>
    53   <system.web>
    54     <compilation debug="true" />
    55   </system.web>
    56 </configuration>

    3. 寄宿服务

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

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

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

    4. 使用ksoap2调用WCF

      去ksoap2官网 

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

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

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

      ISoapService

    1 package junit.soap.wcf;
    2 
    3 import org.ksoap2.serialization.SoapObject;
    4 
    5 public interface ISoapService {
    6     SoapObject LoadResult();
    7 }

    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. 最后运行结果

  • 相关阅读:
    lua "Hello, world!"[转]
    用16进制编辑器编写一个DLL文件【转自看雪】
    Lua脚本语言入门(目前魔兽使用的可以写在宏内的语言)转自中国Lua开发者
    some tips about web hacking
    DevCpp/Mingw32/GCC专栏
    .NET中的幕后英雄MSCOREE.dll [转]
    手写可执行程序[ 转自看雪]
    VC下编译lua和luabind[转]
    简论程序是如何动态修改内存或指令的【转自看雪】
    一些链接(转仅供收藏)
  • 原文地址:https://www.cnblogs.com/ruishuang208/p/4226739.html
Copyright © 2020-2023  润新知