2011-03-01 7 views
1

C#에서 웹 참조를 사용하여이 작업을 수행하는 방법에 대한 많은 질문이 있지만 그 방법을 알고 있습니다. 내가 성취하려고하는 것은 기능을 복제하는 대신 프로젝트에서 참조 할 수있는 Java Web Services를 사용하는 휴대용 DLL을 갖는 것입니다. 그 중 하나는 웹 참조를 사용하면 KeepAlive 요청이 true으로 설정된다는 것입니다. 그것은 개발중인 환경에서 작동하지 않으며 false이어야합니다. Web References에서 내가 한 것은 SoapHttpClientProtocol을 상속받은 추상 클래스를 만들고 Reference.cs를 추상 클래스에서 상속하도록 변경하는 것입니다. 추상 클래스는 다음과 같이보고 :이 날의 Web.config에 있던 값을 설정하는 GetWebRequest 생성자를 오버라이드 (override) 할 수C# 서비스 참조를 통해 Java 웹 서비스 사용

[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; 
    } 
} 

. Java Web Service에 대한 Service Reference를 통해이 작업을 수행하는 방법에 대해 궁금합니다. 내가 사용하고있는 프레임 워크 인 4.0에서 간소화 된 serviceModel 섹션에 대한 몇 가지 예제를 발견했지만 url과 timeout도 지정해야합니다. 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의 크기를 늘려야했지만 완벽하게 작동했습니다. 도와 줘서 고마워! –