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.
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>
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
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>
So beheben Sie dieses Problem Konfigurieren Sie das Attribut httpGetEnabled und das Attribut httpsGetEnabled in der Datei web.config
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
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>
...
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.
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:
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
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
Haben Sie versucht, den Host-Header in IIS einzustellen?
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
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.
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
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
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)
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>
Dieser Beitrag hat es für mich gelöst. Ich musste meinen Domänennamen mit meiner IP-Adresse und Website in IIS verknüpfen.