namespace WebService1
{
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
InitializeComponent();
}
private IContainer components = null;
private void InitializeComponent()
{
}
protected override void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}
[WebMethod]
public string Hello(string str)
{
return "你好:" + str;
}
}
}
設置web.config的http編碼部分
<globalization requestEncoding="gb2312" responseEncoding="gb2312" />
默認.Net 1.1的web服務沒有打開get和post模式,打開它
<system.web>
<webServices>
<protocols>
<add name="HttpGet" />
<add name="HttpPost" />
</protocols>
</webServices>
用J2ME寫客戶端調用程序
打開netbeans,新建移動程序,新建一個com.sun.J2ME包,然後新建一個MIDlet,名字叫MIDlet,鍵入以下代碼
/*
* HttpTest.Java
*
* Created on 2006年3月6日, 下午3:30
*/
package com.sun.J2ME;
import Javax.microedition.midlet.*;
import Javax.microedition.lcdui.*;
import Javax.microedition.io.*;
import Java.io.*;
import Java.lang.String;
/**
*
* @author 蛙蛙王子
* @version
*/
public class HttpTest extends MIDlet
{
private Display display;
public HttpTest()
{
display = Display.getDisplay(this);
}
protected void startApp() throws MIDletStateChangeException
{
HttpConnection hc = null;
DataInputStream dis = null;
try {
String url = "http://localhost/WebService1/Service1.asmx/Hello?str=呱呱";
hc = (HttpConnection)Connector.open(url);
hc.setRequestProperty("content-type", "text/Html;charset=gb2312"); //這裡要設置charset
int len = (int)hc.getLength();
dis = new DataInputStream(hc.openInputStream());
if (len > 0) {
byte[] myData = new byte[len];
dis.readFully(myData);
String content="";
dis.read(myData,0,myData.length);
content = new String(myData,"UTF-8"); //這裡轉換成UTF-8編碼
Form f = new Form("HTTP Test");
f.append(content);
display.setCurrent(f);
}
}
catch(Exception e)
{
System.out.println(e.toString()) ;
notifyDestroyed();
}
finally
{
try{
if(hc!=null)
hc.close();
if(dis!=null)
dis.close();
}catch(Exception e){
System.out.println("關閉錯誤");
}
}
}
protected void pauseApp()
{
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
}
}
按F6就可以運行你的程序了,點擊模擬器的啟動鍵,測試你的程序,可以看到web服務返回的XML字符串,然後你可以進入Java裡相應的XML操作的類來解析返回的XML來獲取指定節點的數據並進一步執行業務邏輯。
小節:
一般來說解決中文問題,傳輸數據的時候不要考慮編碼問題,只傳輸字節流,客戶端讀取字節流後根據相應的編碼協議進行解析,一邊是GB2312另一邊也是GB2312。如果web服務和客戶端都是Java的話,可以一邊用WRITEUTF(),另一邊用READUTF(),就簡單多了。