【问题标题】:Consume a Java Web Service through a C# Service Reference通过 C# 服务参考使用 Java Web 服务
【发布时间】:2011-07-06 16:07:44
【问题描述】:

关于如何在 C# 中使用 Web 引用来执行此操作有很多问题,但我知道如何执行此操作。我想要完成的是拥有一个可移植的 dll,它使用我可以在我的项目中引用的 Java Web 服务,而不是复制功能。其中一件事是,对于 Web 引用,请求的 KeepAlive 设置为 true。这不适用于我正在开发的环境,它必须是false。我对 Web References 所做的是创建一个继承 SoapHttpClientProtocol 的抽象类,并将 Reference.cs 更改为从抽象类继承。抽象类如下所示:

[System.Web.Services.WebServiceBinding(Name = "JavaWebReferenceProxy")]
public abstract class JavaWebReferenceProxy : SoapHttpClientProtocol
{
    public JavaWebReferenceProxy()
    {
        base.Timeout = Settings.Instance.SoapTimeout;
    }

    protected override WebRequest GetWebRequest(Uri uri)
    {
        WebRequest rq = base.GetWebRequest(uri);
        ((HttpWebRequest)rq).KeepAlive = Settings.Instance.SoapKeepAlive;

        return rq;
    }
}

这允许我覆盖 GetWebRequest 和构造函数来设置 web.config 中的值。我想知道如何使用对 Java Web 服务的服务引用来做到这一点。我在 4.0(这是我正在使用的框架)中找到了简化的 serviceModel 部分的一些示例,但我还需要指定 url 和超时。我不确定是否可以使用简化的 serviceModel 或者是否需要使用完整的实现。我也不确定我是否可以使用服务参考。如果有人实施了这样的事情,我只是在寻找一些指导。

serviceModel 部分在我的配置文件中应该是什么样子?我需要指定的三件事是 URL、超时和保持活动。提前致谢。

【问题讨论】:

    标签: c# java web-services web-config wcf-binding


    【解决方案1】:

    您需要自定义绑定。试试这个:

    <system.serviceModel>
      <bindings>
        <customBinding>
          <binding name="myBinding" sendTimout="00:05:00">
            <textMessageEncoding messageVersion="Soap11" />
            <httpTransport keepAliveEnabled="false" />
          </binding>
        </customBinding>
      </bindings>
      <client>
        <endpoint name="myEndpointName" address="http://..." binding="customBinding" 
                  bindingConfiguration="myBinding" contract="MyReference.IMyService" />
      </client>
    </system.serviceModel>
    

    SendTimeout 应该设置操作完成的超时时间(包括接收响应),keepAliveEnebled 控制持久的 HTTP 连接,edpoint 中的地址是服务的地址。

    【讨论】:

    • 我不得不增加 readerQuotas 的大小,但这非常有效。非常感谢您的帮助!
    猜你喜欢
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2014-07-19
    相关资源
    最近更新 更多