Dephi調用C#編寫的WebService的一些問題與解決

來源:互聯網
上載者:User

問題1:服務端接收的所有中文都是"?????"(亂碼)
解決:設定HTTPRIO控制項的HTTPRIO.HTTPWebNode.UserUTF8InHeader屬性為true

問題2:Dephi編寫的用戶端在windows2003下調用WebService提示"Access violation at address 00E59195. Write of address 00E59195"
解決:我的電腦屬性->進階->效能->設定->資料執行防止。選中"只為關鍵 Windows 程式和服務啟用資料執行防止。當然你可以選擇另一個選項,並添加我們的用戶端作為例外處理。有二點比較奇怪的,一、並不是每一台windows2003的機器都需要這樣設定;二、有問題的2003機器使用.net寫的用戶端卻能正常訪問WebService。

問題3:從服務端得到的XML字串,一分析就出錯
解決:先使用WideString變數儲存返回的XML字串。再利用這個變數分析。string不能識別分行符號。

問題4:服務端得到的參數都為空白值
解決:檢查一下引入的WebService單元的最後三行是否如下
initialization
  InvRegistry.RegisterInterface(TypeInfo(YourWebServiceSoap), 'http://tempuri.org/', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(YourWebServiceSoap), 'http://tempuri.org/%operationName%');
  InvRegistry.RegisterInvokeOptions(TypeInfo(YourWebServiceSoap), ioDocument);//這一行有時會沒有
end.
這一行 InvRegistry.RegisterInvokeOptions(TypeInfo(YourWebServiceSoap), ioDocument);有時候沒有的。舉個例子,當我們的WebService的其中一個方法有參數的類型為DataSet時,單元檔案的最後幾行是這樣的
initialization
  InvRegistry.RegisterInterface(TypeInfo(YourWebServiceSoap), 'http://tempuri.org/', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(YourWebServiceSoap), 'http://tempuri.org/%operationName%');
  RemClassRegistry.RegisterXSClass(GetDataSetResult, 'http://tempuri.org/', GetDataSetResult);
  RemClassRegistry.RegisterXSClass(updateSet, 'http://tempuri.org/', 'updateSet');
end.
這時,服務端接收到的所有參數都為null;這裡你所手工在中間加入上面所提到的那一行。

問題5:服務端方法返回的DateTime,Delphi取得的時間不對。
解決:引用後,delphi是用TXSDateTime來接收C#的DateTime變數的。TXSDateTime有兩個屬性AsDateTime、AsUTCDateTime都是TDateTime,也就是Delphi用的日期變數了,但這兩個屬性得到的時間是不對的。放斷點可以觀察到TXSDateTime的年、月、時各變數都是正確的,所以解決的方式是取年月時分各變數重新組合成時間變數。
在這個過程,我碰到一個有趣的情況。看下面的C#代碼

[WebMethod(EnableSession=true)]
public DateTime MyTime()
{
    DateTime cur = DateTime.Now;
    return cur;
}

[WebMethod(EnableSession=true)]
public DateTime YourTime(DateTime pTime)
{
    return pTime.AddDays(1);
}

Delphi調用後者,TXSDateTime中的AsDateTime屬性儲存的時間是對的。調用MyTime(),AsDateTime儲存的時間就不對! 我以為AsUTCDateTime的情況可能會有所不同,但其實這裡他與AsDateTime是一樣的。另外,.net能不能再做些什麼呢?我注意到.net的DateTime有這麼一個方法ToUniversalTime;我在MyTime中嘗試應用這個方法,結果更遭,delphi得到的年時分各變數的值不對了;期待AsUTCDateTime會給我驚喜,結果他還是與AsDateTime非常的一致;結果都不對。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.