我想在.NET中开发一个Web服务,并希望这个Web服务可以在Java中使用。我需要遵循哪些步骤。我写了几个Web服务但是客户端都是.Net。请让我知道我应该遵循的步骤。
此外,我的网络服务将采用二进制文件作为输入,请告诉我如何实现这一目标?
答案 0 :(得分:5)
我认为你不需要做任何额外的事情来完成这个任务。 Web服务的主要目的是可以从任何平台访问它们,这是因为Web服务所基于的基础XML格式。
因此,您只需通过Java客户端连接到.NET Webservice,就像连接Java WebService一样。
就二进制文件输入而言,这可能是一个问题,因为Java和.NET中的二进制文件序列化可能不同。即,仅在运行时创建二进制文件的情况下。我没有记错,但我认为我已经读过某些地方,.NET和Java中的基础字节排序机制存在差异。其中一个是little-endian,另一个是high-endian,因此两个平台的序列化二进制文件可能会有所不同,尽管它们可能会序列化相同的数据。 (我不是100%肯定这个,所以如果有人知道这一点,请纠正我)
答案 1 :(得分:3)
对于二进制文件,使用字符串元素并将其返回base64编码。尽管Java没有内置函数来进行base 64编码/解码,但它很容易实现。这样您就不必担心序列化问题了。适用于Java,PHP,Python等。
如果二进制文件非常大((在兆字节范围内),您可能希望将其作为soap附件返回。 (DIME或MTOM)有时客户端会有XML拒绝服务预防措施(我可以想到几个这样做的网络设备),并会尝试将整个消息加载到缓冲区中进行解析。如果缓冲区不够大,则会丢失消息。将大型base64编码二进制文件作为附件发送可以避免这种情况。
最后,.Net将允许您创建Java客户端无法处理的目标命名空间。这会引起问题。确保命名空间符合标准。
答案 2 :(得分:2)
这个应该开箱即用,但我会建议不要返回复杂的数据结构或期望输入参数等。如果您需要这种复杂性,我建议改为/接受XML。
答案 3 :(得分: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;}}
}
答案 4 :(得分:0)
对于所有原始和复杂的数据类型,这将是开箱即用的。但对于二进制文件或更确切地说二进制数据使用 Base64表示。
Base64是将二进制数据表示为字符串的通用形式。