自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Symbian學(xué)習(xí)筆記(17)

系統(tǒng)
如何使用Symbian中提供的WebService框架來SayHello。
如何使用Symbian中提供的WebService框架來SayHello。

  從SDK文檔中提供的資料來看這個(gè)接口似乎有點(diǎn)復(fù)雜,包括了Connection API、Description API和Manager API三套東西,此外還涉到了XML的解析之類的一些API的應(yīng)用。

  閱讀了一下它的例子程序(S60Ex目錄下的AddressBook),讓我更暈乎了。怎么跟自己平時(shí)使用的WebService不一樣了?

  在SDK文檔中關(guān)于CSenServiceConnection有這么一段描述:

  Web Services包括兩種不同的框架模型:

  1. Identity Based Web Services Framework (ID-WSF). The framework ID for this is KDefaultIdWsfFrameworkID ("ID-WSF").

  2. Basic Web Services Framework. Framework ID is KDefaultBasicWebServicesFrameworkID ("WS-I").

  如果提供了Contract則缺省使用ID-WSF。

  首先用.NET做一個(gè)簡單的WebServices來測(cè)試,就用缺省產(chǎn)生的HelloWorld吧。很簡單的,它的SOAP描述如下:

view plaincopy to clipboardprint?
<PRE class=csharp name="code">POST /uim/PService.asmx HTTP/1.1     

Host: localhost   

Content-Type: text/xml; charset=utf-8     

Content-Length: length     

SOAPAction: "urn:pservice:helloworld"   

<?xml version="1.0" encoding="utf-8"?>   

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">   
<soap:Body>   

<HelloWorld xmlns="http://sharetop/pservice" />   

</soap:Body>   

</soap:Envelope>   

HTTP/1.1 200 OK     

Content-Type: text/xml; charset=utf-8     

Content-Length: length     

<?xml version="1.0" encoding="utf-8"?>   

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">   

  <soap:Body>   

<HelloWorldResponse xmlns="http://sharetop/pservice">   
<HelloWorldResult>string</HelloWorldResult>   
  </HelloWorldResponse>   

  </soap:Body>   

</soap:Envelope></PRE>  

view plaincopy to clipboardprint?

POST /uim/PService.asmx HTTP/1.1     
Host: localhost
Content-Type: text/xml; charset=utf-8     

Content-Length: length     

SOAPAction: "urn:pservice:helloworld"   

<?xml version="1.0" encoding="utf-8"?>   

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">     

<soap:Body>     

<HelloWorld xmlns="http://sharetop/pservice" />     

</soap:Body>     

</soap:Envelope>     

HTTP/1.1 200 OK     

Content-Type: text/xml; charset=utf-8     

Content-Length: length   

<?xml version="1.0" encoding="utf-8"?>     

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">     

  <soap:Body>     

<HelloWorldResponse xmlns="http://sharetop/pservice">     

<HelloWorldResult>string</HelloWorldResult>     

</HelloWorldResponse>     

</soap:Body>   

</soap:Envelope>  

POST /uim/PService.asmx HTTP/1.1

Host: localhost

Content-Type: text/xml; charset=utf-8

Content-Length: length

SOAPAction: "urn:pservice:helloworld"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <HelloWorld xmlns="http://sharetop/pservice" />
  </soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <HelloWorldResponse xmlns="http://sharetop/pservice">
      <HelloWorldResult>string</HelloWorldResult>
    </HelloWorldResponse>
  </soap:Body>
</soap:Envelope>

  下面我們自己來做一個(gè)WS的客戶端實(shí)例吧。先用向?qū)梢粋€(gè)HelloWorld應(yīng)用,為了研究方便,我們不打算做什么界面,所有的輸出都通過LOG輸出到日志文件。

  為了編碼方便,我們?cè)黾右粋€(gè)類WebEngine,它應(yīng)該派生于CSenBaseFragment和MSenServiceConsumer。聲明如下:

 

view plaincopy to clipboardprint?

class CWebEngine : public CSenBaseFragment, public MSenServiceConsumer     

{     

public:   

  ~CWebEngine();     
static CWebEngine* NewL();     
  static CWebEngine* NewLC();     

void ConnectL();   

void SayHello();     

   //from MSenServiceConsumer   

  virtual void HandleMessageL(const TDesC8& aMessage);   

   virtual void HandleErrorL(const TInt aErrorCode,const TDesC8& aError);   

  virtual void SetStatus(const TInt aStatus);     

protected:     

//from CSenBaseFragment   

virtual void StartElementL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const Xml::RAttributeArray& aAttrs);  

  virtual void EndElementL(const TDesC8& aNsUri,  const TDesC8& aLocalName, const TDesC8& aQName);   

private:   

CWebEngine();   

void ConstructL();     

public:   

CHelloWorldResult * delegate;   

private:     

  CSenServiceConnection* iConnection;   

CSenXmlServiceDescription* iSession;     

CSenXmlReader* iXmlReader;     

};  

class CWebEngine : public CSenBaseFragment, public MSenServiceConsumer

{

public:

        ~CWebEngine();

        static CWebEngine* NewL();

        static CWebEngine* NewLC();

        void ConnectL();

        void SayHello();

        //from MSenServiceConsumer

        virtual void HandleMessageL(const TDesC8& aMessage);

        virtual void HandleErrorL(const TInt aErrorCode,const TDesC8& aError);

        virtual void SetStatus(const TInt aStatus);

protected:

        //from CSenBaseFragment

        virtual void StartElementL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const Xml::RAttributeArray& aAttrs);                  

        virtual void EndElementL(const TDesC8& aNsUri,  const TDesC8& aLocalName, const TDesC8& aQName);

private:

        CWebEngine();

        void ConstructL();

public:

        CHelloWorldResult * delegate;

private:

        CSenServiceConnection* iConnection;

        CSenXmlServiceDescription* iSession;       

        CSenXmlReader* iXmlReader;

};

  除了實(shí)現(xiàn)兩個(gè)父類的方法以外,還要增加ConnectL()用來連接,SayHello()用來調(diào)用遠(yuǎn)程方法。那個(gè)delegate是一個(gè) CHelloWorldResult類的實(shí)例,這個(gè)類同樣派生于CSenDomFragment,說明它對(duì)應(yīng)一段XML內(nèi)容,我們用它來處理結(jié)果,就是那個(gè)HelloWorldResponse標(biāo)簽下的內(nèi)容。

  這個(gè)WebEngine的實(shí)現(xiàn)邏輯是:先在ConnectL中初始化WS客戶端,在SetStatus回調(diào)中取當(dāng)前狀態(tài)值如果為 KSenConnectionStatusReady ,則可以調(diào)用SayHello去執(zhí)行那個(gè)WS的方法,然后,在HandleMessageL回調(diào)中將得到的結(jié)果(XML內(nèi)容的字節(jié)流)去解析一下,解析 XML的回調(diào)就是那兩個(gè)StartElement和EndElement。

【編輯推薦】

  1. Symbian每6個(gè)月發(fā)布一款新開源操作系統(tǒng)
  2. 微軟建WindowsMarketplace 完善智能機(jī)平臺(tái)
  3. 大力模仿Android 傳微軟WM6.5可裝插件
責(zé)任編輯:龐桂玉 來源: it168
相關(guān)推薦

2009-04-12 08:57:50

Symbian諾基亞移動(dòng)OS

2009-04-12 09:02:32

Symbian諾基亞移動(dòng)OS

2009-04-12 09:06:00

Symbian諾基亞移動(dòng)OS

2009-04-12 08:59:05

Symbian諾基亞移動(dòng)OS

2009-04-12 09:00:08

Symbian諾基亞移動(dòng)OS

2009-04-12 09:01:05

Symbian諾基亞移動(dòng)OS

2009-04-12 08:36:09

Symbian諾基亞移動(dòng)OS

2009-04-12 08:55:18

Symbian諾基亞移動(dòng)OS

2009-04-12 08:51:50

Symbian諾基亞移動(dòng)OS

2009-04-12 08:45:32

Symbian諾基亞移動(dòng)OS

2009-04-12 09:07:17

Symbian諾基亞移動(dòng)OS

2009-04-12 08:48:47

Symbian諾基亞移動(dòng)OS

2009-04-12 08:46:43

Symbian諾基亞移動(dòng)OS

2009-04-12 08:50:08

Symbian諾基亞移動(dòng)OS

2009-04-12 08:52:52

Symbian諾基亞移動(dòng)OS

2012-05-24 09:38:08

Symbian

2010-10-27 13:14:24

Symbian

2010-07-12 09:34:59

Symbian開發(fā)

2010-07-22 09:25:21

Symbian開發(fā)

2011-06-08 13:45:44

Symbian Qt
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)