2008年3月24日 星期一

關於WebService開發的個人經驗

去年幫客戶和某超商作欠費的即時查詢及代收的整合,剛開始試寫了幾種方法,但是超商都說我回的Message他們驗證不過吃不進去,最後是超商提供的一個C#範例程式,我拿來改成VB.Net,所以當時有一些Attribute的語法被不明就裡的拿來套用,剛好最近兩天有空就拿來研究,終於都搞通了,以下就是這兩天的研究成果

以VS2005開發Web Service來傳遞自訂物件時,如下例
Public Class Service1
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function Operation(ByVal obj As MyObj) As MyObj
.....
End Function
End Class

Public Class MyObj
.....
End Class


預設Request和Response的SOAP Message會長的像這樣:
=======Request=======
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope ...>
<soap:Body>
<obj>
....
</obj>
</soap:Body>
</soap:Envelope>

=======Response=======
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope ...>
<soap:Body>
<OperationResult>
....
</OperationResult>
</soap:Body>
</soap:Envelope>

但超商希望的是無論在Request和Response的訊息都是在SOAP BODY內包一個<OLTP>...</OLTP>就好,長的像這樣:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope ...>
<soap:Body>
<OLTP>
....
</OLTP>
</soap:Body>
</soap:Envelope>

要怎麼作呢?
要修改Request時的Message容易!
Public Class Service1
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function Operation(ByVal objOLTP As MyObj) As MyObj
.....
End Function
End Class

要改Response時的Message就要在我們的自訂物件上多加一些Attribute的東西
Imports System.Xml.Serialization
<XmlRootAttribute(ElementName:="OLTP")> _
Public Class MyObj
.....
End Class

不過這樣(加上Attribute)改過之後,如果您是在VS2005直接用加入Web參考的方式,去呼叫這個Web Service會發現收不到傳回值,而且您的測試專案可能就會有一個運算式沒有產生值的錯誤訊息,去看Reference.vb(在專案的.\Web References\Web參考資料夾名稱下)會發現您呼叫的是一個Sub而不是Function,當然您可以直接修改這隻程式,不過我強烈建議絶對不要這樣作,因為那一天您不小心去更新Web參考時就毀了,VS2005會重新產生這個檔案,您所作的修改就不見了。所以我建議如果會有要自己修改Reference.vb這個檔案的人,請照這樣作!

  1. 先移去剛剛加的<XmlRootAttribute(ElementName:="OLTP")> _,存檔並重新建置(重建一定要作,不然後面就白作了)
  2. 先開啟VS2005命令提示字元
  3. 輸入 WSDL /l:VB http://伺服器IP/WebService名稱.asmx
  4. 在現行資料夾下會產生一個 WebService名稱.vb 的檔案
  5. 將這個.vb的檔案複製到測試專案資料夾下並加入到測試專案中
  6. 修改測試專案程式碼,將原本程式碼中的 Web參考資料夾名稱.ServiceName 改成 ServiceName,Web參考資料夾名稱.MyObj 改成 MyObj
  7. 作到這裡,看起來已經沒有錯誤訊息了,但是實際執行時,您會發現雖然是Function但傳回值卻永遠是Nothing,那是因為VS2005只會去讀SOAP BODY內的<XXXXResult>...</XXXXResult>內容當作傳回值(XXXX就是您WebMethod的Function名稱)
  8. 打開 WebService名稱.vb ,修改Function宣告式的傳回值部份,在XmlElementAttribute中加入ElementName:="OLTP" 讓VS2005會去讀SOAP BODY中的<OLTP>...</OLTP>內容當作傳回值即可

Public Function Operation( <System.Xml.Serialization.XmlElementAttribute( _
[Namespace]:="http://tempuri.org/")> ByVal OLTP As MyObj) _
As <System.Xml.Serialization.XmlElementAttribute([Namespace]:="http://tempuri.org/", ElementName:="OLTP")> MyObj
Dim results() As Object = Me.Invoke("Operation", New Object() {OLTP})
Return CType(results(0),MyObj)
End Function


2008年3月2日 星期日

如何自動開啟Oracle資料庫

在Windows環境下只要設定服務:Oracle_SID的啟動類型為自動即可,在UNIX環境下則是修改/var/opt/ovacle/oratab,將SID那一行的N改為Y即可

Oracle OCP證書申請發證流程

今天收到一封e-mail,是去年一起上Oracle教育訓練課程的同學寄來的,原來他也考過OCP了,但不知道要怎樣才能拿到證書,去年我剛考過時也是搞不清楚,問了已經考過OCP的同事,他也只記得要上要去prometric網站上登錄,所以我就只好去拜Google大神,那時想說只會用這一次所以也沒有保留資料,所以剛剛又再幫同學找了一遍,還真不好找,既然會有人問,就把他記在我的bolg囉!

以下資料引用自:http://www.hxre.org/post/50.html

引用網址為: http://www.hxre.org/cmd.asp?act=tb&id=50&key=83854

============傳說中的分隔線=====================

如果您已经完成ORACLE一门原厂培训和顺利通过了OCP(042,043)考试后,请在7天后登录如下网址:
http://oracle.prometric.com,并按照如下步骤进行填写。
1) 如果您已经注册,请点击Secure Sign-in;如果未注册,请点击First-time Registration建立新帐户
(无论注册与否,请务必使用已有的Prometric ID,否则不能确保证书拿到);
2) 请填写用户名和密码,并点击“继续continue”
3) 选择“进行考试Take Test”
4) 在中间栏框“Private Tests”处,请9i考生输入“9icourse”,而10g考生输入“10gcourse”,并“提交submit”
5) 点击“take test”或“resume test”后,再点击“begin survey”,正式进入调查问卷一
6) 请按步骤逐一填写各项,请勿空项、漏项。请务必填清“registration ID”
7) 完成问卷一后,请填写您的建议或空项,点击“下一步”
8) 出现个人信息界面后,点击“继续”,开始进入调查问卷二
9) 点击“begin Test”,并回答问题,之后“结束问答End Test”
10)确认“结束考试”。请填写您的建议或空项,点击“下一步”
11)出现个人信息界面后,点击“继续”
12)确认无误后,“sign-out”退出
Oracle将以此调查问卷一和二做为发放证书的依据,一旦收到问卷,将尽快受理。
-------------------------------------------------------------
关于Hands On Course的填写提示及补救方法
Hands On Course 的填写注意点
1、链接www.oracle.prometric.com网址,填写Prometric ID and password 进入页面。第一次进入的话,
请进入Creat an Account进行密码等设置。
2、Keycodes for the Hands On Course Requirement. For example:
Oracle Datebase 10g Administrator Certified Professional------------10gcourse
Oracle Datebase 10g Administrator Certified Master------------------ocmcourses
Oracle 9i Datebase Administrator Certified Professional--------------9icourse
Oracle Application Server 10g Adiministrator: Certified Professional-------Available Soon
Oracle 9i Database Adiministrator Certified Master-------Available Soon
3、按要求完成选择题目。
其中有一题是需要填写你的Enrollment ID,即Registration Number。这个在考试结果上有写明。
4、在完成所有的选项后,确认无误,请选择提交。等待信息认证的确认结果。
------------------------------------------------------------------------------------------------
hands on (50-60天)后还没有收到证书,或者还有其他疑问,请拨打甲骨文大学的热线电话:800-810-9931转62548
--------------------------------------------------------------------------------------------------
Hands On Course 填写错误后的补救方式
1、如果在提交前就发现自己有地方填写错误,那么还好,请耐心等待30天。30天后请更正信息重新提交。
2、如果提交后发现自己填写错误,那么也还好,不是无法挽回的。就是比较麻烦:~
第一、请耐心等待7-30天,在此期间您将会收到Prometric与Oracle发出来的邮件;
第二、再收到邮件后,请更加耐心地写封邮件至:OCPREQ_ww@oracle.com(如果您参加的 是OCP的考试的话);
第三、邮件的Title为:9i/10g ocp certificate successful kits request;
第四、就是邮件的内容啦,必须包含个人信息+考试时间(最后一门考试结束的时间) +培训课程名称
+Enrollment ID+培训开始的时间+培训地点+培训机构
第五、发送邮件,继续等待。:Z
基本上就是这样一个步骤,如果还有什么问题,
也可以打甲骨文大学的热线电话“800-810-9931”去咨询啊!