通过C#服务参考来使用Java Web服务

时间:2011-03-01 16:56:47

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

关于如何使用C#中的Web Reference进行此操作有很多问题,但我知道如何做到这一点。我想要实现的是拥有一个可移植的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 Service的服务引用来实现这一点。我在4.0中找到了简化serviceModel部分的一些示例(我正在使用的框架),但我还需要指定url和timeout。我不确定我是否可以使用简化的serviceModel或者我是否需要使用完整的实现。我也不确定我是否可以使用服务参考。如果有人实现了这样的话,我只是在寻找一点指导。

我的配置文件中serviceModel部分应该是什么样的?我需要指定的3件事是URL,Timeout和keep-alive。提前谢谢。

1 个答案:

答案 0 :(得分:2)

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

<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中的地址是服务的地址。