.NET C#呼叫sap的webservices獲取資料,對於sap時間型別的處理
1.問題
呼叫sap的webservices,由於程式環境無法直接在專案中引用地址。故採用,在伺服器拿到wsdl檔案,後生成c#本地的形式。
問題一:如何生成代理類
問題二:生成代理類,編寫程式。在正式環境使用時,卻發現無法找到地址,無法使用
問題三:sap時間型別生成代理類後自動轉化為c#的datetime型別,實際使用時出錯(因為sap時間型別不完全對等於c#datetime)
問題四:服務在本機和測試機可以部署 在正式伺服器無法部署
2.解決步驟
1.訪問所提供地址,得到xml檔案,改字尾為wsdl檔案。(注:sap形式的webservices,地址後不用加“?wsdl”)
在vs命令列裡輸入: wsdl /l:cs /n:*** /o:*** wsdlFilePath 回車即可得到cs檔案(只需記住wsdl l,n,o即可)
/l: 全稱為language,為所要生成的語言,這裡選擇“cs”;
/n: 全稱為NameSpace,為所要生成代理類的名稱空間;
/o: 全稱為OutPut,為所要輸出代理類的路徑;
,
2.無法找到地址,經查。
在輸入地址時使用的為類似 http://ip:port/Details,但在生成代理類後文件的地址資訊為http://域名:port.Details
或者地址直接為http://域名:port.Details 應用程式以後再部署到伺服器上時,可能該伺服器無法訪問到該域名。
解決:C:\Windows\System32\drivers\etc下的host檔案,加入本機域名對映資訊。如下圖所示
3.生成的代理類下,物件有以下屬性 private System.DateTime zJSJField; 該欄位其實只有日期沒有時間,不完全對等於c#的DatetTime,在使用時產生錯誤。
解決:手動修改該型別為字串型別。(應該有三處需要修改(成員變數,getset訪問器,欄位remarks))即可成功
4.服務使用topshelf和quartz,無法在伺服器部署,報錯資訊為沒有許可權。
解決:需要企業版的防毒軟體對服務的exe檔案授權信任,或者暫時關閉掉安全軟體,即可正確安裝。