HTTP 헤더에 .NET SOAP 클라이언트가 "Connection : KeepAlive"를 포함하여 .NET SOAP 클라이언트가 어떻게 방지합니까? (WSE3.0 사용)

StackOverflow https://stackoverflow.com/questions/1527407

문제

HTTP Connection 헤더에는 내 웹 서비스 클라이언트가 포함됩니다.Connection: Keep-Alive

나는 이것을 비활성화하고 싶다. 일부 연구를 수행 한 후에는이 작업을 수행하는 방법이 SoapHttpChannelOptions 클래스에서 거짓. 그러나 나는 액세스/수정 방법이 없다 SoapHttpChannelOptions 웹 서비스 클라이언트 클래스에서 WSE3.0 (웹 서비스 향상.

제 경우에는 생성 된 스터브 클래스가 확장됩니다 Microsoft.Web.Services3.WebServicesClientProtocol

Google을 검색하는 예제를 찾을 수 없었고 SoaphttpChannelOptions 클래스의 대부분의 멤버는 WebServicesClientProtocol 클래스에 상속됩니다 ...

SOAPHTTPCHANNELOPTIONS 참조
WebServicesClientProtocol 참조

참고 : 웹 서버를 수정하려고하지 않습니다. 웹 서비스 클라이언트를 수정하려고합니다.

도움이 되었습니까?

해결책

한 가지 해결책은 GetWebRequest(Uri uri) 방법.
이 솔루션으로 이어지는 정보는 이것에 대해 발견되었습니다. MSDN 포럼 게시물

방법 1 : 자동 생성 된 파일을 수정합니다.

이 스 니펫을 자동으로 생성 된 참조 CS 파일에 붙여 넣으십시오. 이 접근법의 단점은 웹 서비스 클라이언트 어댑터 (즉, 웹 참조 업데이트)를 재생하는 경우 파일을 다시 수정해야한다는 것입니다.

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
    System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)base.GetWebRequest(uri);
    webRequest.KeepAlive = false;
    return webRequest;
}

방법 2 : 부분 클래스를 만듭니다

파일을 만들고 다음 코드를 붙여 넣습니다. 웹 서비스와 일치하도록 네임 스페이스 및 클래스 이름을 수정하십시오.

namespace YourNamespace
{
    using System.Diagnostics;
    using System.Web.Services;
    using System.ComponentModel;
    using System.Web.Services.Protocols;
    using System;
    using System.Xml.Serialization;

    /// <summary>
    /// This partial class makes it so all requests specify
    /// "Connection: Close" instead of "Connection: KeepAlive" in the HTTP headers.
    /// </summary>
    public partial class YourServiceNameWse : Microsoft.Web.Services3.WebServicesClientProtocol
    {
        protected override System.Net.WebRequest GetWebRequest(Uri uri)
        {
            System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)base.GetWebRequest(uri);
            webRequest.KeepAlive = false;
            return webRequest;
        }
    }
}

메모

이 접근법 5월 WSE를 사용하지 않는 경우 작업하십시오. 비 WSE Webservice 클래스에서 위의 방법을 붙여 넣을 수있었습니다. System.Web.Services.Protocols.SoapHttpClientProtocol. 내 테스트에서 WSE 클래스 내에서 할 때와 같이 HTTP 연결 라인이 포함되지 않은 것으로 보입니다 ( Microsoft.Web.Services3.WebServicesClientProtocol) 그런 다음 "연결 : 닫기"라인을 포함했습니다. 에 따르면 이 사이트는 HTTP Keepalive에 있습니다:

HTTP 1.1에 따라 공식 keepalive 방법은 다릅니다. 다음 헤더로 달리 명시되지 않는 한 모든 연결은 살아있는 상태로 유지됩니다. 연결 : 닫기

따라서 더 이상 헤더에 keepalive를 포함하지 않을 수 있지만 ... HTTP1.1에서는 기본값으로 간주됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top