Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过C#服务引用使用Java Web服务_C#_Java_Web Services_Web Config_Wcf Binding - Fatal编程技术网

通过C#服务引用使用Java Web服务

通过C#服务引用使用Java Web服务,c#,java,web-services,web-config,wcf-binding,C#,Java,Web Services,Web Config,Wcf Binding,关于如何使用C#中的Web引用来实现这一点,有很多问题,但我知道如何做到这一点。我试图实现的是拥有一个可移植的dll,它使用我可以在项目中引用的Java Web服务,而不是复制功能。其中一点是,对于Web引用,请求的KeepAlive设置为true。这不适用于我正在开发的环境,它必须是false。我对Web引用所做的是创建一个继承SoapHttpClientProtocol的抽象类,并将Reference.cs更改为从抽象类继承。抽象类如下所示: [System.Web.Services.Web

关于如何使用C#中的Web引用来实现这一点,有很多问题,但我知道如何做到这一点。我试图实现的是拥有一个可移植的dll,它使用我可以在项目中引用的Java Web服务,而不是复制功能。其中一点是,对于Web引用,请求的
KeepAlive
设置为
true
。这不适用于我正在开发的环境,它必须是
false
。我对Web引用所做的是创建一个继承
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中的值。我想知道如何通过对JavaWeb服务的服务引用来做到这一点。我在4.0中找到了简化的
serviceModel
部分的一些示例(这是我正在使用的框架),但是我还需要指定url和超时。我不确定是否可以使用简化的
服务模型
,或者是否需要使用完整的实现。我也不确定是否可以使用服务参考。我只是在寻找一些指导,如果有人已经实现了这样的东西


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

您需要定制装订。试试这个:

<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应该为操作完成(包括接收响应)设置超时,KeepAliveEnabled控制持久HTTP连接,edpoint中的地址是服务的地址。

我必须增加readerQuotas的大小,但这非常有效。非常感谢你的帮助!