Trenutno ste van mreže; čekamo da se ponovo povežete na internet

HTTP. SYS vynútene odpojí HTTP väzby pre vlastné hosťované služby WCF

DÔLEŽITÉ: Tento článok je preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft a možno ho opraviť prostredníctvom technológie Community Translation Framework (CTF). Microsoft ponúka strojovo preložené články, články upravené komunitou aj články preložené prekladateľmi, aby zabezpečil prístup ku všetkým článkom databázy Knowledge Base vo viacerých jazykoch. Strojovo preložené články aj upravené články môžu obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky. Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené neprávnym prekladom obsahu alebo jeho použitím zo strany našich zákazníkov. Ďalšie informácie o technológii CTF nájdete na lokalite http://support.microsoft.com/gp/machine-translation-corrections/sk.

Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 3137046
Príznaky
Vlastné hosťované služby Windows Communication Foundation (WCF) na serveri so systémom Windows Server 2012 R2 a väzby typu http (napríkladväzba basicHttpBinding), ktorá používa server náhle klesne základné pripojenie TCP. Keď sa vyskytne tento problém, vidíte v HTTP. SYS denníkov, ktoré sa zvyčajne nachádzajú v priečinku C:\WINDOWS\System32\LogFiles\HTTPERR. Súbory denníkov majú položky, ktoré uvádza Timer_MinBytesPerSeconddôvod. Tento problém sa nevyskytuje v systéme Windows Server 2008 R2.

Záznam denníka sa podobá nasledujúcemu hláseniu:
#Fields: dátum čas c ip c portu s-ip sk uri sk verziu s port sk – metóda sc stavu, s siteid s dôvodu s-queuename
dátumčas 10.145.136.58 41079 10.171.70.136 8888 HTTP/1.1 príspevok /MySelfHostedService/TestService1 – Timer_MinBytesPerSecond -
dátumčas 10.145.136.58 41106 10.171.70.136 8888 HTTP/1.1 príspevok /MySelfHostedService/TestService1 – Timer_MinBytesPerSecond -
dátumčas 10.145.136.58 40995 10.171.70.136 8888 HTTP/1.1 príspevok /MySelfHostedService/TestService1 – Timer_MinBytesPerSecond -
dátumčas 10.145.136.58 41022 10.171.70.136 8888 HTTP/1.1 príspevok /MySelfHostedService/TestService1 – Timer_MinBytesPerSecond -
V WCF stopy, služba zlyhá počas operácie prijať bajtov System.Net.HttpListenerException, ako v nasledujúcom príklade:
<Exception>
<ExceptionType>System.ServiceModel.CommunicationException priestor názvov System.ServiceModel, verzia = 4.0.0.0 Culture = neutral, PublicKeyToken = b77a5c561934e089</ExceptionType>
<Message>Pokus o operáciu na neexistujúcu sieťového pripojenia</Message>
<StackTrace>
v System.ServiceModel.Channels.HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream.Close()
v System.ServiceModel.Channels.HttpOutput.Close()
v System.ServiceModel.Channels.HttpRequestContext.OnReply (hlásenie správy, TimeSpan timeout)
v System.ServiceModel.Channels.RequestContextBase.Reply (hlásenie správy, TimeSpan timeout)
v System.ServiceModel.Channels.HttpRequestContext.SendResponseAndClose (HttpStatusCode statusCode, reťazec statusDescription)
v System.ServiceModel.Channels.HttpChannelListener'1.HandleProcessInboundException (výnimkou ex HttpRequestContext kontext)
</StackTrace>
<ExceptionString>System.ServiceModel.CommunicationException: Pokus o operáciu na neexistujúcu sieťové pripojenie---&gt; System.Net.HttpListenerException: pokus o operáciu na neexistujúcu sieťového pripojenia
v System.Net.HttpResponseStream.Dispose (Boolean odstraňovanie)
v System.IO.Stream.Close()
v System.ServiceModel.Channels.HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream.Close()
---Koniec sledovania zásobníka vnútorných výnimiek---
v System.ServiceModel.Channels.HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream.Close()
v System.ServiceModel.Channels.HttpOutput.Close()
v System.ServiceModel.Channels.HttpRequestContext.OnReply (hlásenie správy, TimeSpan timeout)
v System.ServiceModel.Channels.RequestContextBase.Reply (hlásenie správy, TimeSpan timeout)
v System.ServiceModel.Channels.HttpRequestContext.SendResponseAndClose (HttpStatusCode statusCode, reťazec statusDescription)
v System.ServiceModel.Channels.HttpChannelListener'1.HandleProcessInboundException (výnimkou ex HttpRequestContext kontext)</ExceptionString>
<InnerException>
<Exception>
<ExceptionType>System.Net.HttpListenerException systém, verziu = 4.0.0.0 Culture = neutral, PublicKeyToken = b77a5c561934e089</ExceptionType>
<Message>Pokus o operáciu na neexistujúcu sieťového pripojenia</Message>
<StackTrace>
v System.Net.HttpResponseStream.Dispose (Boolean odstraňovanie)
v System.IO.Stream.Close()
v System.ServiceModel.Channels.HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream.Close()
</StackTrace>
<ExceptionString>System.Net.HttpListenerException (0x80004005): Pokus o operáciu na neexistujúcu sieťového pripojenia
v System.Net.HttpResponseStream.Dispose (Boolean odstraňovanie)
v System.IO.Stream.Close()
v System.ServiceModel.Channels.HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream.Close()</ExceptionString>
<NativeErrorCode>4CD</NativeErrorCode>
</Exception>
</InnerException>
</Exception>
Príčina
Spustenie systému Windows Server 2012 R2, ovládač jadra, ktorá spracováva požiadavky HTTP (http.sys) zmenil z hľadiska ako spracováva vlastnosťTimer_MinBytesPerSecond. Predvolene Http.sys považuje všetky rýchlosť nepresahuje 150 bajtov za sekundu ako potenciálne útok nízke rýchlosti pripojenia a klesne pripojenie TCP vydať prostriedku. Tento problém sa nevyskytuje v systéme Windows Server 2008 R2 limit pomalé pripojenie v systéme Windows Server 2012 R2 sa oveľa viac.
Ako problém obísť
Obísť túto funkciu, nastavte minSendBytesPerSecond na hodnotu 0xFFFFFFFF (maximálne 32-bitov nepodpísané celé číslo), čo je 4,294,967,295 v desiatkovom formáte. Táto špecifickou hodnotou vypne funkciu nižšiu rýchlosť rýchlosť pripojenia.

Použite jeden z nasledujúcich postupov nastaviť minSendBytesPerSecond hodnota 0xFFFFFFFF.

Metóda 1: Použitie konfiguračný súbor

 <system.net>    <settings>       <httpListener>           <timeouts minSendBytesPerSecond="4294967295" />       </httpListener>    </settings> </system.net>

Metóda 2: Nastavenie programovo

Zmeniť vlastnosť výslovne kód ako v nasledujúcom príklade:

System.Net.HttpListenerTimeoutManager.MinSendBytesPerSecond = 4294967295

Možnosť programovania možno do vlastnej serviceBehavior Ak zmeniť kód služby nie je možné. Čiže správanie môže byť integrovaný s existujúce služby klesá DLL a zmenou konfigurácie, ako v nasledujúcom príklade:
  1. Otvorte riešenia v Visual Studio a pridanie nového projektu Knižnica. Názov je "BehaviorProject."
  2. Vytvorenie triedy s názvom "HttpListenerBehavior."
  3. Aktualizovať nasledujúci zdrojový kód:
    namespace BehaviorProject{    public class HttpListenerBehavior : BehaviorExtensionElement, IServiceBehavior    {        public override Type BehaviorType        {            get { return this.GetType(); }        }        protected override object CreateBehavior()        {            return new HttpListenerBehavior();        }        public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)        {            return;        }        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)        {                        UpdateSystemNetConfiguration();        }        private void UpdateSystemNetConfiguration()        {            ConfigurationProperty minSendBytesPerSecond;            minSendBytesPerSecond = new ConfigurationProperty("minSendBytesPerSecond",                typeof(long), (long)uint.MaxValue, null, null, ConfigurationPropertyOptions.None);            ConfigurationPropertyCollection properties;            HttpListenerTimeoutsElement timeOuts = new HttpListenerTimeoutsElement();            properties = GetMember(timeOuts, "properties") as ConfigurationPropertyCollection;            if (properties != null)            {                properties.Remove("minSendBytesPerSecond");                SetMember(timeOuts, "minSendBytesPerSecond", minSendBytesPerSecond);                properties.Add(minSendBytesPerSecond);            }        }        public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)        {            return;        }        public static object GetMember(object Source, string Field)        {            string[] fields = Field.Split('.');            object curr = Source;            BindingFlags bindingFlags = BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;            bool succeeded = false;            foreach (string field in fields)            {                Type t = curr.GetType();                succeeded = false;                FieldInfo fInfo = t.GetField(field, bindingFlags);                if (fInfo != null)                {                    curr = fInfo.GetValue(curr);                    succeeded = true;                    continue;                }                PropertyInfo pInfo = t.GetProperty(field, bindingFlags);                if (pInfo != null)                {                    curr = pInfo.GetValue(curr, null);                    succeeded = true;                    continue;                }                throw new System.IndexOutOfRangeException();            }            if (succeeded) return curr;            throw new System.ArgumentNullException();        }        public static void SetMember(object Source, string Field, object Value)        {            string[] fields = Field.Split('.');            object curr = Source;            BindingFlags bindingFlags = BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public;            bool succeeded = false;            int i = 0;            foreach (string field in fields)            {                i++;                Type t = curr.GetType();                succeeded = false;                FieldInfo fInfo = t.GetField(field, bindingFlags);                if (fInfo != null)                {                    if (i == fields.Length)                        fInfo.SetValue(curr, Value);                    curr = fInfo.GetValue(curr);                    succeeded = true;                    continue;                }                PropertyInfo pInfo = t.GetProperty(field, bindingFlags);                if (pInfo != null)                {                    if (i == fields.Length)                        fInfo.SetValue(curr, Value);                    curr = pInfo.GetValue(curr, null);                    succeeded = true;                    continue;                }                throw new System.IndexOutOfRangeException();            }            if (succeeded) return;            throw new System.ArgumentNullException();        }    }}

  4. Zostava knižnice aplikácie.
  5. Skopírujte priečinok aplikácie vytvorené DLL.
  6. Otvorte aplikáciu konfiguračný súbor, vyhľadajte <system.serviceModel>tag a pridajte nasledujúce vlastné správanie:</system.serviceModel>
    <extensions> <behaviorExtensions> <add name="httpListenerBehavior" type="BehaviorProject.HttpListenerBehavior, BehaviorProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </behaviorExtensions></extensions><behaviors> <serviceBehaviors> <!-- if the serviceBehavior used by the service is named, add to the appropriate named behavior --> <behavior name="customBehavior"> <!-- The behavior is referenced by the following in line. Visual Studio will mark this line with a red underline because it is not in the config schema. It can be ignored. Notice that the other behaviors (like serviceMetadata) does not need to be added if they are not currently present --> <httpListenerBehavior /> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors></behaviors>
Ďalšie informácie
Zistiť, či zmeny sú platné, použite jeden z nasledujúcich postupov.

Metóda 1

  1. Zachytiť fileafter výpisu pamäte, teda serviceHost.
  2. Výpis objektov typu System.Net.HttpListenerTimeoutManagera čítať vlastnosťminSendBytesPerSecond .
0:000 >! DumpObj/d 02694a64
Meno: System.Net.HttpListenerTimeoutManager
MethodTable: 7308b070
EEClass: 72ec5238
Veľkosť: 20(0x14) bajtov
Súbor: C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll
Polia:
MT poľa pozícia názov typu VT Attr hodnoty
73092254 4001605 4... Net.HttpListener 0 inštancie 026932f0 prijímač
73c755d4 4001606 8 System.Int32 [0] inštancie 02694a78 časových limitov
73c7ef20 4001607 c System.UInt32 1, napríklad 4294967295 minSendBytesPerSecond<>

Všimnúť, že hodnota minSendBytesPerSecond je 4294967295.

Metóda 2
  1. V režime správcu, otvorte cmd.exe a spustite nasledujúci príkaz v príkazovom riadku (po otvorení serviceHost):

    netsh http Zobraziť servicestate = "session" > %temp%\netshOutput.txt
  2. Spustením nasledujúceho príkazu Otvoriť súbor netshOutput.txt. Sa otvorí v programe Poznámkový blok.

    spustenie %temp%\netshOutput.txt
  3. Vyhľadajte číslo portu aplikácie služieb (napríklad 8888) a Zobraziť relácie. Toto je krokom si overíte, že rýchlosť minimálne odosielania (bajtov) je prepísať 4294967295 hodnotou.
  4. Zobrazia sa položky podobné nasledujúcemu:

    Server relácie ID: FE00000320000021
    Verzia: 2.0
    Stav: aktívne
    Vlastnosti:
    Max šírky: 4294967295
    Časové limity:
    Telo entity časového limitu (s): 120
    Mozgov telo entity časového limitu (s): 120
    Požiadavka front časového limitu (s): 120
    Nečinnosti pripojenia časového limitu (s): 120
    Hlavička čakať časového limitu (s): 120
    Rýchlosť minimálne odosielania (bajtov): 150
    Adresa URL skupín:
    Identifikácia skupiny URL: FD00000340000001
    Stav: aktívne
    Vyžiadať názov frontu: požiadavky vo fronte bez názvu.
    Vlastnosti:
    Max šírky: zdedené
    Maximálny počet pripojení: zdedené
    Časové limity:
    Telo entity časového limitu (s): 0
    Mozgov telo entity časového limitu (s): 0
    Požiadavka front časového limitu (s): 0
    Nečinnosti pripojenia časového limitu (s): 0
    Hlavička čakať časového limitu (s): 0
    Rýchlosť minimálne odosielania (bajtov): 4294967295<>
    Počet registrovaných URL: 1
    Registrované adresy URL:
    HTTP://+:8888/TESTSERVICE1/
Ďalšie informácie nájdete v téme Vlastnosť HttpListenerTimeoutManager.MinSendBytesPerSecond Téma na webovej lokalite webová lokalita Microsoft Developer Network.
Poznámka: Toto je článok typu FAST PUBLISH, ktorý bol vytvorený priamo v organizácii technickej podpory spoločnosti Microsoft. Informácie uvedené v tomto článku sa poskytujú „tak, ako sú“ v reakcii na naliehavé problémy. V dôsledku rýchlosti, akou boli tieto materiály sprístupnené, môžu obsahovať typografické chyby a môžu byť kedykoľvek revidované bez predchádzajúceho upozornenia. Informácie o ďalších skutočnostiach, ktoré je potrebné zohľadniť, získate na stránke Podmienky používania.

Upozornenie: Tento článok bol preložený automaticky.

Svojstva

ID članka: 3137046 - Poslednji pregled: 03/25/2016 01:13:00 - Verzija: 3.0

Windows Communication Foundation 4.5, Windows Communication Foundation 4

  • kbmt KB3137046 KbMtsk
Povratne informacije