webentwicklung-frage-antwort-db.com.de

WCF verwendet beim Anzeigen von MyService.svc? Wsdl nicht den Computernamen anstelle des Domänennamens

Mein WCF-Dienst scheint den Computernamen anstelle des Domänennamens zu verwenden. Wenn ich den Link MyService.svc?wsdl sehe, wird mein Computername angezeigt.

Wo füge ich meinen Domainnamen in der web.config hinzu? Endpunktadresse, Basisadresse oder Identität?

Hinweis: Ich verwende SSL, es muss also https://www.example.com/myservice.svc sein.

32
Blankman

WCF 4.0 hat dieses Problem in einigen Fällen mit einer neuen Konfigurationsoption gelöst, die Anforderungsheader verwendet:

    <behaviors>
        <serviceBehaviors>
            <behavior name="AutoVaultUploadBehavior">
                <useRequestHeadersForMetadataAddress>
                    <defaultPorts>
                        <add scheme="https" port="443" />
                    </defaultPorts>
                </useRequestHeadersForMetadataAddress>
27
nick_alot

Bei IIS7 fügen Sie es nicht der web.config hinzu, sondern der Konfigurationsdatei IIS. 

Bearbeiten Sie zunächst die Bindungen für Ihre Website, sodass das HTTP-Protokoll einen Hostnamen angibt, falls Sie dies nicht bereits getan haben. Dadurch wird sichergestellt, dass der korrekte Name unter HTTP angegeben wird.

Navigieren Sie zu C:\Windows\System32\inetsrv\config und öffnen Sie die Datei applicationHost.config

Suchen Sie nach dem Site-Abschnitt. Sie werden etwas wie das Folgende sehen

<sites>
  <site name="Default Web Site" id="1">
    <application path="/">
        <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
    </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:80:Puck" />
      <binding protocol="net.tcp" bindingInformation="808:*" />
      <binding protocol="net.pipe" bindingInformation="*" />
      <binding protocol="net.msmq" bindingInformation="localhost" />
      <binding protocol="msmq.formatname" bindingInformation="localhost" />
      <binding protocol="http" bindingInformation="*:80:Puck.idunno.org" />
      <binding protocol="http" bindingInformation="*:80:localhost" />
      <binding protocol="https" bindingInformation="*:443:" />
    </bindings>
  </site>
  ....
</sites>

Sie sehen, dass die Bindungen für das http-Protokoll einen Host-Header angeben, https jedoch nicht. Wenn Sie im Internet surfen, können Sie keine Host-Header über HTTPS verwenden. WCF verwendet sie jedoch beim Generieren der WSDL. Wenn diese nicht gefunden wird, wird der Name des Computers übernommen.

Sie müssen also nur die HTTPS-Bindung so bearbeiten

      <binding protocol="https" bindingInformation="*:443:Puck" />

anhängen des korrekten FQDN an das Ende der Bindungsinformationen. Setzen Sie IIS zurück, und WCF sollte es jetzt erhalten.

Die IIS6-Lösung wurde bereits von darin veröffentlicht

9
blowdart

Wie in diesem Link angegeben, verwendet WCF den Computernamen anstelle der IP-Adresse und kann nicht aufgelöst werden

Es hat mein Problem gelöst, vielleicht weil ich mehrere Websites in einem Host habe und sehr einfach ist.

< serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

</ system.serviceModel>

8
Pedro Dias

So beheben Sie dieses Problem Konfigurieren Sie das Attribut httpGetEnabled und das Attribut httpsGetEnabled in der Datei web.config

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
4
User0106

Wir verwenden WCFExtras , um den Namen des Hosts zu ändern.

WCFExtras ist eine kleine Open-Source-Bibliothek, in der Sie Folgendes schreiben können, um den Hostnamen zu ändern:

<behaviors>
  <endpointBehaviors>
    <behavior name="xxx">
      <wsdlExtensions location="http://some-hostname-visible-from-outside/path-to-a-service/service.svc" singleFile="True" />
    </behavior>
  ...
3

hinzufügen von <useRequestHeadersForMetadataAddress></useRequestHeadersForMetadataAddress> zu dem gelösten Problem. Es scheint, dass WCF 4.0 sich um die Header kümmert, indem sie Folgendes hinzufügt. Ich habe SSL für den Zugriff auf den WCF-Dienst verwendet. 

2
ABN

Ich hatte genau dieses Problem mit meinem Produktionsserver. Ich habe verschiedene Artikel zu den verschiedenen Host-Headern mit IIS und WCF-Problem gefunden. Wenn Sie jedoch SSL verwenden, können Sie keinen Host-Header zu den Website-Identitäten in der Benutzeroberfläche IIS hinzufügen. Sie können sie nur zu normalen HTTP-Identitäten hinzufügen:

enter image description here

Sie können jedoch SSL-Host-Header über ein Eingabeaufforderungsskript hinzufügen. Dies hat das Problem für mich gelöst:

cscript.exe adsutil.vbs set /w3svc/<site identifier>/SecureBindings ":443:<Host header>"

Weitere Informationen hierzu finden Sie unter diesem Link: http://blumenthalit.net/blog/Lists/Posts/Post.aspx?ID=14

1
David Masters

Ich habe hier Lösungen hinzugefügt, http://knowledgebaseworld.blogspot.com/2010/06/domain-name-replaced-with-machine-name.html . Es sollte für alle funktionieren, da es gut mit mir auf lokaler Ebene, Inszenierung und Produktion zusammenarbeitet, ohne dass dies für mich bindend ist

1
IBhadelia

Haben Sie versucht, den Host-Header in IIS einzustellen?

1
Rebecca

Keine dieser Lösungen war mir hilfreich. Ich konnte dieses Problem mit einer sehr einfachen benutzerdefinierten Service Factory lösen.

Installation eines WCF-Dienstes auf einer gemeinsam genutzten Hosting-Site, überarbeitet

1
Chris Marisic

Obwohl es sich um ein altes Posting handelt, gibt es hier eine Antwort. Fügen Sie unter Dienstverhalten -> DienstMetaData Dienst-URL hinzu.

Wenn Sie myService nicht hinzufügen, wird ein weiterer Fehler ausgegeben.

1
Khurram Tanwir

Vielen Dank an Kanasz Robert. Schritte, die mein Problem gelöst haben - 1. Erstellen Sie die WSDL im Browser und speichern Sie sie in einer Datei (indem Sie .svc? WSDL aus dem Browser treffen), und speichern Sie sie als .wsdl

  1. Produzieren Sie die xsd-Dateien, indem Sie die URL von wsdl (xsd = xsd0 usw.) aufrufen und vom Browser in die Datei speichern. Speichern Sie sie als .wsdl

  2. ersetzen Sie alle Rechnernamensreferenzen aus "wsdl" durch Domänennamen (oder die IP-Adresse) und ändern Sie die Xsd-Referenzen. Speichern Sie UND ersetzen Sie alle Rechnernamensreferenzen aus den Xsd-Dateien durch den Domänennamen (oder die IP-Adresse) .xsd-Erweiterung (dh name0.xsd, name1.xsd, name2.xsd)

  3. kopieren Sie die wsdl- und xsd-Datei (en) in das virtuelle Verzeichnis und fügen Sie der web.config folgende Zeilen hinzu:

<behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true" externalMetadataLocation="http://IPorDomainName/MyServices/FileTransferService.wsdl"  />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

0
subho

Dieser Beitrag hat es für mich gelöst. Ich musste meinen Domänennamen mit meiner IP-Adresse und Website in IIS verknüpfen.

http://www.codemeit.com/wcf/wcf-wsdl-xsdimport-schemalocations-link-to-local-machine-name-not-domain-name-while-hosted-in-iis.html

0
Shane