2015-05-08 21 views
5
  • IIS 7.5/Windows Server 2008 R2
  • wielu witryn IIS przyłączone do tego samego adresu IP, używając nazw hostów.
  • Ruch przychodzący do stron, które działają poprawnie.
  • Przychodzące żądania sieci Web wykonane przez kod witryny zaplecza kończą się niepowodzeniem. Strona zdalna zwraca 404 (NotFound).
  • Zweryfikowano przez śledzenie sieci, że ruch trafia do serwera usuwania.
  • Te same żądania działają poprawnie, jeśli są wykonywane z witryny używającej dedykowanego adresu IP (tj. Nie są udostępniane w/żadnych innych witrynach).

Ktoś ma jakieś pomysły, jak zrobić tę pracę lub co może pójść nie tak?wychodzących żądań internetowych zawieść, gdy wykonane z witryn IIS przy użyciu udostępnionego adresu IP

ślad Network na hostingu:

Udane żądanie strony w/niewspólną adres IP:

No.  Time   Source    Destination   Protocol Info 
    6366 15:54:35.590463 192.168.1.76   173.194.77.121  HTTP  GET /key/value/one/two HTTP/1.1 
    6369 15:54:35.599879 173.194.77.121  192.168.1.76   TCP  http > 55407 [ACK] Seq=1 Ack=110 Win=344 Len=0 
    6370 15:54:35.621587 173.194.77.121  192.168.1.76   HTTP  HTTP/1.1 200 OK (application/json) 
    6608 15:54:35.815774 192.168.1.76   173.194.77.121  TCP  55407 > http [ACK] Seq=110 Ack=357 Win=509 Len=0 

Failed wniosek witryny przy użyciu udostępnionego adresu IP:

No.  Time   Source    Destination   Protocol Info 
    9720 15:54:39.244192 192.168.1.80   173.194.77.121  HTTP  GET /key/value/one/two HTTP/1.1 
    9760 15:54:39.256958 173.194.77.121  192.168.1.80   TCP  [TCP segment of a reassembled PDU] 
    9761 15:54:39.256962 173.194.77.121  192.168.1.80   HTTP  HTTP/1.1 404 Not Found (text/html) 
    9762 15:54:39.257027 192.168.1.80   173.194.77.121  TCP  55438 > http [ACK] Seq=212 Ack=1676 Win=512 Len=0 

Kod:

public static HttpWebRequest CreateWebRequest(string url, string method = "GET", string referer = null, string contentType = null, int timeout = 100000, string authentication = null, string bindToIpAddress = null, string host = null) 
{ 
    var request = (HttpWebRequest)WebRequest.Create(url); 

    if (!string.IsNullOrWhiteSpace(bindToIpAddress)) 
    { 
     IPAddress bindIp; 
     if (!IPAddress.TryParse(bindToIpAddress, out bindIp)) 
     { 
      throw new ArgumentException("bindToIpAddress"); 
     } 

     request.ServicePoint.BindIPEndPointDelegate = ((sp, rep, rc) => 
     { 
      return new IPEndPoint(bindIp, 0); 
     }); 
    } 

    request.Accept = "*/*"; 
    request.ContentType = contentType; 
    request.Referer = referer; 
    request.Method = method; 
    request.Timeout = timeout; 

    if (!string.IsNullOrWhiteSpace(host)) 
    { 
     request.Host = host; 
    } 

    return request; 
} 

string GetData() 
{ 
    try 
    { 
     string result; 

     var request = CreateWebRequest("http://jsonplaceholder.typicode.com/posts/1", 
             "GET", 
             "somedomain.com", 
             timeout: (10 * 1000), 
             bindToIpAddress: "192.168.27.133" /*site IP*/); 

     request.Accept = "application/json"; 

     using (var response = request.GetResponse()) 
     { 
      using (var sr = new StreamReader(response.GetResponseStream())) 
      { 
       result = sr.ReadToEnd(); 
      } 
     } 

     return result; 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 
} 
+1

Głupie pytanie, ale czy dedykowane i współużytkowane adresy IP pochodzą od tego samego dostawcy internetu? Czy jest szansa, że ​​Twój wspólny adres IP jest na czarnej liście? – Jacques

+0

Tak. To samo ISP i środowisko hostingu, Rackspace, dla obu adresów IP. Na czarnej liście gdzie? Według usługi zewnętrznej? Zdarza się ze wszystkimi usługami stron trzecich, które wypróbowaliśmy. Nie sądzę, żeby wszyscy byli na czarnej liście na IP? –

+0

Czy zrobiłeś IISReset po zmianie adresu IP z Dedicated na Shared? –

Odpowiedz

0

To okazało się błędem w naszej aplikacji. W niektórych przypadkach nagłówek hosta (właściwość Host na żądanie) był nieprawidłowo ustawiony (do nazwy hosta hostingu/witryny źródłowej). Obetwana próbka kodu w pytaniu nie pokazuje tego. To było w porządku dla usług internetowych, które ignorowały nagłówek i był problem (404 odpowiedzi) dla innych, które nie nie zignorować nagłówek. Problem nie miał nic wspólnego z IIS lub wspólnym adresem IP. Dziękuję za wszystkie odpowiedzi.

+0

Komentarz [Dexion] (http://stackoverflow.com/users/460275/dexion) był na miejscu. –

0

Odpowiedź 404 przychodzi z witryny zdalnej, więc witryna zdalna nie może przetworzyć żądania i nie ma nic wspólnego z tym, co dzieje się na lokalnym serwerze.

Jedyna różnica z punktu widzenia witryny zdalnej to adres IP nadawcy, więc musi być skonfigurowany do akceptowania żądań tylko z określonych adresów IP. Ograniczenie to może znajdować się na serwerze zdalnym lub dowolnej zaporze sieciowej, routerze lub proxy.