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

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 18:27
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:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 00:41

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:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 18:27
@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:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 00:41

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:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 18:27
@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!