私のWCFサービスは、ドメイン名の代わりにコンピューター名を使用しているようです。 MyService.svc?wsdl
リンクを表示すると、コンピューター名が表示されます。
Web.configのどこにドメイン名を追加しますか?エンドポイントアドレス、ベースアドレス、またはID?
注:SSLを使用しているため、https://www.example.com/myservice.svc
である必要があります
WCF 4.0は、リクエストヘッダーを使用する新しい設定オプションを使用して、この問題を解決した場合があります。
<behaviors>
<serviceBehaviors>
<behavior name="AutoVaultUploadBehavior">
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="https" port="443" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
IIS7の場合、web.configに追加するのではなく、IIS構成ファイルに追加します。
まず、Webサイトのバインディングを編集して、HTTPプロトコルでホスト名をまだ指定していない場合は指定します。これにより、HTTPで正しい名前が取得されるようになります。
C:\ Windows\System32\inetsrv\configに移動し、applicationHost.configを開きます
サイトセクションを探します。次のようなものが表示されます
<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>
HttpプロトコルのバインディングでHostヘッダーが指定されていることがわかりますが、httpsでは指定されていません。 Webブラウジングを行っている場合、HTTPS経由でホストヘッダーを使用することはできませんが、WCFはWSDLを生成するときに引き続きそれを使用します。ホストヘッダーが見つからない場合は、マシン名にフォールバックします。
したがって、必要なのは、HTTPSバインディングを次のように編集することだけです。
<binding protocol="https" bindingInformation="*:443:Puck" />
バインディング情報の最後に正しいFQDNを追加します。リセットIISそしてWCFは今それを取得するはずです。
IIS6ソリューションはすでにdarinによって投稿されています
このリンクに記載されているように WCFはIPアドレスの代わりにコンピューター名を使用しているため、解決できません
同じホストに複数のWebサイトがあり、非常に単純なためか、問題は解決しました。
< serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</ system.serviceModel>
この問題を修正するにはweb.configファイルでhttpGetEnabled属性とhttpsGetEnabled属性を構成します
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
WCFExtras を使用してホストの名前を変更しています。
WCFExtrasは、ホスト名を変更するために次のように記述できる小さなオープンソースライブラリです。
<behaviors>
<endpointBehaviors>
<behavior name="xxx">
<wsdlExtensions location="http://some-hostname-visible-from-outside/path-to-a-service/service.svc" singleFile="True" />
</behavior>
...
<useRequestHeadersForMetadataAddress></useRequestHeadersForMetadataAddress>
を追加するだけで問題が解決しました。 WCF 4.0は、これを追加することでヘッダーを処理しているようです。これは、WCFサービスへのアクセスにSSLを使用していました。
実稼働サーバーでこの問題が発生しました。 IISおよびWCFの問題がある複数のホストヘッダーに関するさまざまな記事を見つけましたが、SSLを使用している場合、IIS UI、通常のHTTPIDにのみ追加できます。
ただし、コマンドプロンプトスクリプトを使用してSSLホストヘッダーを追加できます。これにより、次の問題が解決しました。
cscript.exe adsutil.vbs set /w3svc/<site identifier>/SecureBindings ":443:<Host header>"
詳細については、次のリンクを参照してください: http://blumenthalit.net/blog/Lists/Posts/Post.aspx?ID=14
ここにソリューションを追加しました http://knowledgebaseworld.blogspot.com/2010/06/domain-name-replaced-with-machine-name.html 。 iisに拘束されることなく、ローカル、ステージング、およびプロダクションで私とうまく機能するので、すべての人にとってうまくいくはずです。
IISでホストヘッダーを設定する を試しましたか?
これらの解決策はどれも私には役に立ちませんでした。非常にシンプルなカスタムサービスファクトリでこれを解決することができました。
古い投稿ですが、ここに答えがあります。 [サービスの動作]-> [ServiceMetaData]で、サービスのURLを追加します。
MyServiceを追加しないと、別のエラーがスローされることに注意してください。
KanaszRobertに感謝します。私の問題を解決した手順-1。ブラウザでwsdlを生成し、ファイルに保存します(ブラウザから.svc?wsdlを押して).wsdlとして保存します
Wsdlからurl(xsd = xsd0など)を押してxsdファイルを生成し、ブラウザーからファイルに保存して、.wsdlとして保存します。
wsdlからのすべてのマシン名参照をドメイン名(またはIPアドレス)に置き換え、xsd参照を変更して保存し、xsdファイルからのすべてのマシン名参照をドメイン名(またはipアドレス)に置き換えます。xsdファイルには必ず.xsd拡張子(つまり、name0.xsd、name1.xsd、name2.xsd)
wsdlファイルとxsdファイルを仮想ディレクトリにコピーして、次の行をweb.configに追加します。
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" externalMetadataLocation="http://IPorDomainName/MyServices/FileTransferService.wsdl" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
この投稿は私のためにそれを解決しました。ドメイン名をIISのIPアドレスとWebサイトに関連付ける必要がありました。