VS.NET能否在不生成包装器结构的情况下使用Java WS?

时间:2011-05-03 14:19:12

标签: java .net web-services wsdl

在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服务时总是生成这些包装器?我们想绕过生成的客户端并自己实现接口(没有包装器)。这可能吗?

2 个答案:

答案 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配置客户端的实施。