web-dev-qa-db-ja.com

MyService.svc?wsdlを表示するときに、WCFがドメイン名の代わりにコンピューター名を使用しない

私のWCFサービスは、ドメイン名の代わりにコンピューター名を使用しているようです。 MyService.svc?wsdlリンクを表示すると、コンピューター名が表示されます。

Web.configのどこにドメイン名を追加しますか?エンドポイントアドレス、ベースアドレス、またはID?

注:SSLを使用しているため、https://www.example.com/myservice.svcである必要があります

32
Blankman

WCF 4.0は、リクエストヘッダーを使用する新しい設定オプションを使用して、この問題を解決した場合があります。

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

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によって投稿されています

9
blowdart

このリンクに記載されているように WCFはIPアドレスの代わりにコンピューター名を使用しているため、解決できません

同じホストに複数のWebサイトがあり、非常に単純なためか、問題は解決しました。

< serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

</ system.serviceModel>

8
Pedro Dias

この問題を修正するにはweb.configファイルでhttpGetEnabled属性とhttpsGetEnabled属性を構成します

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

WCFExtras を使用してホストの名前を変更しています。

WCFExtrasは、ホスト名を変更するために次のように記述できる小さなオープンソースライブラリです。

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

<useRequestHeadersForMetadataAddress></useRequestHeadersForMetadataAddress>を追加するだけで問題が解決しました。 WCF 4.0は、これを追加することでヘッダーを処理しているようです。これは、WCFサービスへのアクセスにSSLを使用していました。

2
ABN

実稼働サーバーでこの問題が発生しました。 IISおよびWCFの問題がある複数のホストヘッダーに関するさまざまな記事を見つけましたが、SSLを使用している場合、IIS UI、通常のHTTPIDにのみ追加できます。

enter image description here

ただし、コマンドプロンプトスクリプトを使用してSSLホストヘッダーを追加できます。これにより、次の問題が解決しました。

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

詳細については、次のリンクを参照してください: http://blumenthalit.net/blog/Lists/Posts/Post.aspx?ID=14

1
David Masters

ここにソリューションを追加しました http://knowledgebaseworld.blogspot.com/2010/06/domain-name-replaced-with-machine-name.html 。 iisに拘束されることなく、ローカル、ステージング、およびプロダクションで私とうまく機能するので、すべての人にとってうまくいくはずです。

1
IBhadelia
1
Rebecca

これらの解決策はどれも私には役に立ちませんでした。非常にシンプルなカスタムサービスファクトリでこれを解決することができました。

共有ホスティングサイトへのWCFサービスのインストール、再検討

1
Chris Marisic

古い投稿ですが、ここに答えがあります。 [サービスの動作]-> [ServiceMetaData]で、サービスのURLを追加します。

MyServiceを追加しないと、別のエラーがスローされることに注意してください。

1
Khurram Tanwir

KanaszRobertに感謝します。私の問題を解決した手順-1。ブラウザでwsdlを生成し、ファイルに保存します(ブラウザから.svc?wsdlを押して).wsdlとして保存します

  1. Wsdlからurl(xsd = xsd0など)を押してxsdファイルを生成し、ブラウザーからファイルに保存して、.wsdlとして保存します。

  2. wsdlからのすべてのマシン名参照をドメイン名(またはIPアドレス)に置き換え、xsd参照を変更して保存し、xsdファイルからのすべてのマシン名参照をドメイン名(またはipアドレス)に置き換えます。xsdファイルには必ず.xsd拡張子(つまり、name0.xsd、name1.xsd、name2.xsd)

  3. wsdlファイルとxsdファイルを仮想ディレクトリにコピーして、次の行をweb.configに追加します。

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

この投稿は私のためにそれを解決しました。ドメイン名をIISのIPアドレスとWebサイトに関連付ける必要がありました。

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

0
Shane