手动为Web Service创建代理

时间:2012-09-25 15:30:14

标签: c# wcf web-services wsdl

我必须与在Axis 1.2上运行的Web服务进行通信(使用.NET)。使用两个.NET工具和WSDL我创建了C#代理但是我遇到了以下问题:

1)WSDL.exe创建了一个缺少方法输入参数的代理。例如如果应该有这样的方法:

AReturnType AMethod(AnInputType);

创建的代理有这样一种方法:

void AMethod();

2)我读过而不是WSDL.exe,建议使用SVCUTIL.exe。所以我用SVCUTIL创建了代理,但是遇到了返回NULL的infamous problem个对象。不幸的是我找不到合适的解决方案。

所以我愿意手动进行设置。这就是我所拥有的:

  • SoapUI很好地解析了WSDL,可以检查SOAP / XML请求/响应。
  • Axis WSDL2JAVA生成适当的Java代码,并且运行良好
  • 使用HttpWebRequest发送XML / SOAP请求会生成正确的XML / SOAP响应。
  • 我尝试使用XSD.EXE工具生成XSD和C#对象,并将XML响应(通过上一步获得)序列化到这些对象中。

那你有什么建议?有没有办法以某种方式手动创建代理?或者生成的Java代码能以某种方式帮助我吗?

3 个答案:

答案 0 :(得分:1)

以下是我正在处理的项目如何创建和使用手动代理。

这是客户端代理:

 [ServiceContract(Name = "YourServiceContract", Namespace = "http://....")]
 public interface YourServiceContract, 
  {
    [OperationContract]
    object GetObject(object searchCriteria);
   }

public class YourClient : ClientBase<YourServiceContract>, YourServiceContract
{
    public YourClient (){ }

    public YourClient (string endpointConfigurationName)
    : base(endpointConfigurationName){ }

    public object GetObject(object searchCriteria)
    {
    return base.Channel.GetObject(searchCriteria);
    }
}

这就是它的名称:

public void GetYourObject(object searchCriteria)
    {
        YourClient proxy = new YourClient();
        proxy.GetObject(searchCriteria);
        proxy.SafeClose();
    }

答案 1 :(得分:0)

看看这个答案。允许你直接制作HttpRequest: -

答案 2 :(得分:0)

有一组predefined interop bindings将WCF客户端与Java世界中的服务连接起来。