2009-06-22 92 views
2

我想在.NET中開發Web服務,並希望此Web服務在Java中可以使用。我需要遵循哪些步驟。我已經寫了幾個Web服務,但所有的客戶端都是.Net。請讓我知道我應該遵循的步驟。將.NET WebService暴露給其他平臺(Java)

另外我的網絡服務將採用二進制文件作爲輸入,請讓我知道我該如何實現這一目標?

回答

5

我不認爲你需要做任何額外的事情來完成這件事。 Web服務的主要目的是可以從任何平臺訪問它們,這是因爲Web服務基於的基礎XML格式。

因此,您只需要通過Java客戶端連接到.NET Webservice,就像連接到Java WebService一樣。

就二進制文件輸入而言,這可能是一個問題,因爲Java和.NET中的二進制文件序列化可能不同。即,只有在運行時創建二進制文件的情況下。我沒記錯,但我認爲我已經在某處讀到了.NET和Java中底層字節排序機制的差異。其中一個是little-endian,另一個是高端的,由於這兩個平臺的序列化二進制文件可能是不同的,儘管它們可能序列化相同的數據。 (我不是100%肯定這個,所以如果有人知道這一點,請糾正我)

2

應該開箱即用,但我會建議不要返回複雜的數據結構或期望輸入參數。如果你需要這種複雜性,我會建議返回/接受XML。

0

如果您傳遞原始類型,原始類型的結構,原始類型的數組或列表等,那麼任何平臺都應該能夠接受您的數據。例如:

public class Person { 
    public string GivenName {get;set;} 
    public string FamilyName {get;set;} 
    public byte[] Photograph {get;set;} 
} 

public class Company { 
    public int CompanyID {get;set;} 
    public readonly List<Person> _employees = new List<Person>(); 
    public List<Person> Employees {get {return _employees;}} 
} 
3

對於二進制文件,請使用字符串元素並將其返回base64編碼。儘管Java沒有內置函數來執行base 64編碼/解碼,但實現起來很容易。這樣你就不用擔心序列化問題。對於Java,PHP,Python等

如果二進制文件將永遠是非常大的,(成兆字節的範圍),你可能需要將其作爲返回SOAP附件。 (DIME或MTOM)有時,客戶端將實施XML拒絕服務預防措施(我可以考慮多個網絡設備執行此操作),並嘗試將整個消息加載到緩衝區中進行解析。如果緩衝區不夠大,則會丟失消息。發送一個大型的base64編碼二進制文件作爲附件避免了這一點。

最後,.Net將允許您創建Java客戶端無法處理的目標名稱空間。這會導致問題。確保命名空間符合標準。

+0

非常感謝,我的下一個問題是關於文件的大小。我真的不知道什麼DIME等,但我會採取這些投入,並讓我知道如果我有任何問題。 – Kusek 2009-06-22 15:32:27

0

對於所有原始和複雜數據類型,這將工作開箱。但是對於二進制文件或者更確切地說對於二進制數據使用Base64表示

Base64是將二進制數據表示爲字符串的通用形式。