2009-06-22 67 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是将二进制数据表示为字符串的通用形式。