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
Web.config
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">
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
realm="" />
3. 寄宿服務
把網站釋出到web伺服器, 指定網站虛拟目錄指向該目錄
如果你能夠通路http://你的IP:端口/虛拟目錄/服務.svc
那麼,恭喜你,你的服務端成功了!
4. 使用ksoap2調用WCF
去ksoap2官網
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;
@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. 最後運作結果