【问题标题】:Manually creating proxy for Web Service为 Web 服务手动创建代理
【发布时间】:2012-09-25 15:30:13
【问题描述】:

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

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

AReturnType AMethod(AnInputType);

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

void AMethod();

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

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

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

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

【问题讨论】:

    标签: c# wcf web-services wsdl


    【解决方案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();
        }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        看看这个答案。将允许您直接发出 HttpRequest:-

        【讨论】:

        • 是的,我已经提到我通过 HttpWebProxy 得到了正确的响应(我编辑过,它不是明确的)。那么在那之后呢?序列化成 xsd 生成的对象?
        • 是的。虽然不漂亮。还有一篇关于如何做到这一点的 SO 文章:- stackoverflow.com/questions/1295046/…
        • 我猜这是个愚蠢的问题,但是,您不能只添加对轴服务的 WSDL 的服务(或 Web)引用吗?
        • Nick,使用 wdsl 会导致空对象问题stackoverflow.com/questions/8017700/…(但这是一个更广泛的问题,您可以谷歌“axis web service .net null”看看有多少问题存在)
        • 很公平。同时,XDocument、XmlSerializer 方法应该能让您摆脱困境。我已经使用它对 WCF 服务进行“直接”集成测试,我希望准确确定我发送的 XML(以及我希望接收的 XML)。
        猜你喜欢
        • 2011-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多