Toon posts:

[C#]WCF - HttpWebRequest negeert DNS & hosts bij machinenaam

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17:50
Hallo allemaal,

Ik heb een heel raar probleem met WCF. Wij hebben een WCF service gehost in IIS op een Windows Server 2003 machine. Daarnaast hebben we een Windows service die verbinding maakt met de WCF service. Deze verbinding wordt gemaakt op de lokale hostname (http://somehostname/). Dit heeft gewerkt, alleen nu werkt het niet meer en krijgen we een 400 - Bad request van de server terug.

De machine waarop dit draait heeft meerdere ip adressen (bv 192.168.1.1 en 192.168.1.2) gekoppeld aan de lan verbinding. Daarnaast zijn in IIS twee sites gedefinieerd waarbij elke site aan een ander ip adres is gekoppeld. (Dus Default Website is gekoppeld aan 192.168.1.2 en Site2 is gekoppeld aan 192.168.1.1). In het hosts bestand van de machine is ip 192.168.1.2 gekoppeld aan somehostname en als ik ping naar somehostname krijg ik ook 192.168.1.2 als ip adres te zien.

Na heel wat zoekwerk ben ik erachter gekomen dat het HttpWebrequest het hosts bestand volledig negeert en als ik een HttpWebRequest naar http://somehostname/ doe dan krijg ik het eerste ip adres van de machine terug (dus 192.168.1.1 en niet 192.168.1.2 zoals ingesteld is). Hierdoor komt het request dus bij de verkeerde site terecht waar dus de WCF service NIET gehost is en geeft IIS een 400 - Bad request.

Is iemand dit ooit al wel eens tegen gekomen en zijn er misschien oplossingen voor dit probleem? De WCF service die we gebruiken draait onder .Net Framework 3.5.

Hail to the king baby!


Acties:
  • 0Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:51

TeeDee

CQB 241

Hostheader instellen voor de verschillende sites?

[Voor 40% gewijzigd door TeeDee op 03-06-2011 12:35]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17:50
@TeeDee: dat hebben we inderdaad ook geprobeerd. Het tweede ip-adres (192.168.1.1) gekoppeld aan de Default Website met de hostheader somehostname, maar dat vindt WCF weer niet fijn. Die kan het namelijk niet hebben als er meer dan één binding op een site in IIS is waarbinnen de service gehost wordt. Daar zijn wel wat workarounds voor, maar die heb ik niet werkend kunnen krijgen.

Hail to the king baby!


Acties:
  • 0Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:51

TeeDee

CQB 241

En je hebt ook multipleSiteBindings enabled?

code:
1
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />


Bliksem, da's > 3.5 ;)

[Voor 9% gewijzigd door TeeDee op 03-06-2011 12:47]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17:50
@TeeDee: dat is een instelling van .Net 4.0 en dat is niet geinstalleerd op die server en deze service is gebouwd op .Net 3.5.

Maar het probleem zit niet specifiek in WCF. Een normale HttpWebRequest geeft precies hetzelfde probleem.

Deze code gaat ook fout op de machines met Windows Server 2003, op mijn Windows 7 x64 machine werkt het wel goed.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = string.Empty;

            try
            {
                // Create a request for the URL.        
                WebRequest request = WebRequest.Create(textBox1.Text);

                // If required by the server, set the credentials.
                request.Credentials = CredentialCache.DefaultCredentials;

                ((HttpWebRequest)request).ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
                
                // Get the response.
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                
                string strresponse = string.Empty;
                // Display the status.
                strresponse = response.StatusDescription + "\r\n";
                // Get the stream containing content returned by the server.
                Stream dataStream = response.GetResponseStream();
                // Open the stream using a StreamReader for easy access.
                StreamReader reader = new StreamReader(dataStream);
                // Read the content.
                strresponse += reader.ReadToEnd();
                // Display the content.

                // Cleanup the streams and the response.
                reader.Close();
                dataStream.Close();
                response.Close();

                textBox2.Text += strresponse;
            }
            catch (Exception ex)
            {
                textBox2.Text += ex.Message + "\r\n\r\n" + ex.StackTrace;
            }
        }

        private IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
        {
            System.Diagnostics.Trace.WriteLine("Remote EndPoint: " + remoteEndPoint.ToString());
            MessageBox.Show(remoteEndPoint.ToString());
            return null;
        }


Op Windows Server 2003 zal in de messagebox het 192.168.1.1 ip adres getoond worden, op Windows 7 wordt wel 192.168.1.2 getoond.

Hail to the king baby!



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee