2011-03-01 79 views
1

關於如何在C#中使用Web參考來完成此操作有許多問題,但我知道該怎麼做。我試圖完成的是有一個可移植的dll,它使用了我可以在我的項目中引用的Java Web服務,而不是重複該功能。其中一件事情是,使用Web引用將請求的KeepAlive設置爲true。這對我正在開發的環境不起作用,它必須是false。我對Web References做的事情是創建一個抽象類,繼承SoapHttpClientProtocol並將Reference.cs更改爲從抽象類繼承。抽象類是這樣的:通過C#服務參考消費Java Web服務

[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和超時。我不確定我是否可以使用簡化的serviceModel或者是否需要使用完整的實現。我也不確定我是否可以使用服務參考。如果有人執行了這樣的操作,我只是尋找一點指導。

serviceModel部分應該在我的配置文件中看起來像什麼?我需要能夠指定的3件事是URL,超時和保持活動。提前致謝。

回答

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控制在edpoint持久HTTP連接和地址爲服務的地址。

+0

我不得不增加readerQuotas的大小,但這個工作完美。非常感謝你的幫助! – 2011-03-01 20:36:26