软件就是服务----webservice调用金山词霸的问题
我看到一篇文章,说写了一个web服务,功能是调用金山词霸,就是web服务和金山词霸在同一个服务器上运行,实现翻译服务,但是怎么知道金山词霸做翻译功能的模块的接口呢?
大家帮忙想想看
文章来源:
http://www.mscenter.edu.cn/zhuanti/dianziqikan/2ycjswz_2.htm
实现的原理我大概搞清楚了:服务器上首先启动金山词霸,然后有一个AutoQueyService.exe(可以是控制台,winform或者windows服务)运行(功能是监听一个特定的端口),如果发现socket上有数据过来则调用金山词霸做翻译处理,将结果通过socket传出.
而web服务就是去给AutoQueyService.exe发socket数据,得到翻译结果.我这里有web服务的代码,但是就是不知道那个AutoQueyService.exe怎么弄的,难道可以找到金山词霸的内部资料吗(翻译模块的接口),令人费解.
string strResult = ""; //用来保存结果字符串
string strSend; //用来保存需要翻译的单词
byte[] bufferSnd = new byte[1024]; //用于socket发送数据的缓冲区
byte[] bufferIn = new byte[4096]; //用于socket接收数据的缓冲区
string strHost;
string strPort;
//从web.config文件中得到要连接的Query-Dictionary Server的地址和端口号
NameValueCollection addrSetting = (NameValueCollection)ConfigurationSettings.GetConfig("appSettings");
strHost = addrSetting.Get("host");
strPort = addrSetting.Get("port");
ASCIIEncoding sndEnc = new ASCIIEncoding(); //发送数据的编码方式为ASCII码
Encoding rcvEnc = Encoding.GetEncoding("GB2312"); //接收数据的编码方式为GB2312码
//创建socket对象:
Socket sock = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPAddress add = Dns.Resolve(strHost).AddressList[0];
IPEndPoint host = new IPEndPoint(add,int.Parse(strPort));
//连接服务端主机:
sock.Connect(host);
//如果连接成功:
if(sock.Connected)
{
//将要发送的数据放入缓冲区:
strSend = strInput;
sndEnc.GetBytes(strSend,0,strSend.Length,bufferSnd,0);
//发送数据:
sock.Send(bufferSnd);
//接收返回的数据
int nReceived = sock.Receive(bufferIn);
//将返回的数据放入结果字符串,去掉末尾的所有0
strResult = rcvEnc.GetString(bufferIn,0,nReceived);
}
//关闭连接,关闭socket
//sock.Shutdown(SocketShutdown.Both);
sock.Close();
//返回结果
return strResult;
注意:web.config里的设置:
<appSettings>
<add key="host" value="192.168.10.22" /><!-- url or ip of AutoQueryServer.exe -->
<add key="port" value="5678" /><!-- AutoQueryServer.exe used port -->
</appSettings>