在Java(Eclipse)中定义简单Web服务并在Visual Studio中使用服务时,生成的代码包含每个服务方法的请求和响应结构。生成的客户端接口具有接受请求结构并从响应结构返回值的方法。
例如,如果我有一个带有方法add(int a,int b)的服务类SimpleTest,我会得到以下生成的接口(删除了注释):
public interface ISimpleTest
{
MyNamespace.WebServiceProxy.addResponse add(
MyNamespace.WebServiceProxy.addRequest request);
}
但是,如果我创建与WCF Web服务基本相同的类,则代码将生成以下接口:
public interface ISimpleTest
{
int Add(int a, int b);
}
我想弄清楚是否有办法避免在使用Java服务时使用包装类。在XSD中定义数据类型是允许这个还是.NET在使用非.NET服务时总是生成这些包装器?我们想绕过生成的客户端并自己实现接口(没有包装器)。这可能吗?
答案 0 :(得分:0)
如果我不得不猜测是因为Visual Studio用于外部Web服务(Java,Perl,Ruby等)需要从该服务下载WSDL,然后基于WSDL生成.NET存根所有网络服务的界面。
使用WCF Web服务,它已经可以访问代理类等,因此不需要生成存根和骨架来调用Web服务。
这只是猜测......
没有包装器的唯一方法是自己创建所有SOAP请求响应并通过原始HTTP将它们发送到Web服务。这是一个混乱的代码和.NET包装器生成器存在的全部原因,以保护您免受这个混乱!
答案 1 :(得分:0)
您绝对可以使用WCF执行此操作。您应该能够在客户端定义您的界面,如下所示:
[ServiceContract]
public interface ISimpleTest
{
[OperationContract]
int Add(int a, int b);
}
从那里,您可以通过client config or through code配置客户端的实施。