关于如何使用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。提前谢谢。
答案 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中的地址是服务的地址。