3

Windows Server 2003 で WCF Web サービスをホストしています。このサーバーには 2 つの内部 IP しかありません。サービスを外部に公開したいと考えています。これは、外部 IP をサービスにマップするファイアウォールを介して行われます。

そのため、サービスを変更して、内部リンクの外部 IP を表示する必要があります。外部でのみ使用する必要があるため、これは問題ではありません。

IIS でホスト ヘッダーの値を変更すると、IIS から「Bad Request (Invalid Hostname)」という応答が返されます。また、web.config のエンドポイント エントリに「アドレス」値を追加しましたが、内部のマシン名を指しているだけです。何か案は?

編集: IIS7 の動作がまったく同じであることを確認できます。アドレスが機能しませんでした。ホスト名が異なると、無効なホスト名エラーが発生しました。別の (架空の) IP を提示する方法は真剣にありませんか? :/

編集2:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicAnonymous">
                <security mode="None"/>
            </binding>
        </basicHttpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Extended">
                <serviceMetadata httpGetEnabled="true"/>
                <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <diagnostics>
        <messageLogging logEntireMessage="true" logMalformedMessages="false" logMessagesAtServiceLevel="false" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/>
    </diagnostics>
    <services>
        <service behaviorConfiguration="Extended" name="AnCWCFWebService.ProductInfoProvider">
            <endpoint address="" binding="basicHttpBinding" name="ASMX" bindingConfiguration="BasicAnonymous" contract="AnCWCFWebService.Interfaces.IProductInfoProvider"/>
        </service>
    </services>
</system.serviceModel>
4

3 に答える 3

7

404 IIS 構成による BadRequest...

IIS でホスト ヘッダーを変更しようとした後、IIS から 404 BadRequest エラーを受け取った場合、これはよくあることですが、修正方法があります。

IIS 構成を変更して修正する

WCF は、サイトごとに指定された複数の IIS バインディングをどのようにサポートできますか?:
http://tinyurl.com/55q5hg

WCF コードを変更して修正する

または、次の記事では、ある開発者が構成とコードを組み合わせてこの問題をどのように解決したかを説明してい

ます。WCF、SSL、およびホスト ヘッダーの冒険
http://geekswithblogs.net/rakker/archive/2008/07/03/123562.aspx

この記事では、2 つの重要なリンクを参照しています...

最初のものは、IIS でホスト ヘッダーを適切に設定する方法を説明しています。

ホストヘッダーが機能するようになると、次のことがわかります...

「IIS に複数のホスト ヘッダーを使用することはできません。そうしないと、wcf が壊れます」

この制限を回避するための解決策は、この記事に記載されています。また、上記の GeeksWithBlogs.net の記事には、拡張されたバリエーションを提供するコメントもあります。

  • WCF: このコレクションには、スキーム http のアドレスが既に含まれています:
    http://tinyurl.com/62yssd

それでも問題が解決しない場合は、下のコメント欄でお知らせください...


サービスが機能していない場合...

WCF での私の経験では、特に構成に関して、非常に扱いにくい場合があります。ベスト プラクティスに従っており、非標準的なことをしていない場合、展開の問題の大部分は、設定ファイルの不具合が原因です。

理論的には (アーキテクチャの違いにより、実際にはそれほど多くはありません)、IIS で WCF サービスをセットアップすることは、一般的な仮想ディレクトリと、Web アプリケーションまたは ASMX Web サービス用の対応するアプリケーションをセットアップすることと何ら変わりはありません。

したがって、これがインターネットに公開する最初の WCF サービスである場合は、最初の Web サイトを公開するときと同じ簡単な方法に従うことをお勧めします。基本的に、新しいサンプル「WCF サービス アプリケーション」を作成します (これは、C# または VB の Web セクションの [新しいプロジェクトの追加] ダイアログで利用できます)。

動作するようになったら、展開の慣行に従って運用サンドボックスに移動し、ローカルでテストします。このサンドボックスには、一般的なネットワーク構成の問題に関する疑いをなくすために、いくつかの Web サイトまたは Web サービスが既にインストールされていて、インターネットからアクセスできることがわかっていることが望ましいです。そのサーバーからインターネット上で既に正常に公開されているサンプル ASMX Web サービスがある場合は、それが最適です。

次に、Web ブラウザーから ASMX および WCF サービスをテストしてみます。サーバー上でローカルに、他のデスクトップ上で内部的に、最後に外部的にテストします。

URL のテスト

利用可能で関連性のあるすべての種類の URL フレーバーで、Web ブラウザーから標準の SVC および ASMX ファイルへのアクセスをテストしたいと考えています。結果は同様で、サービスの概要ページがウィンドウに表示されます。違いは、web.config ファイルでその機能が無効になっていない場合、ASMX Web サービスの概要により、サービスで Web メソッドを実行できる可能性が高いことです。

次の URL スタイルのブラウザ フェッチの結果を比較してください...

  • http:// localhost /WcfService1/Service1. サービス
  • http:// localhost /WcfService1/Service1. asmx
  • http:// MachineName または MachineFQN /WcfService1/Service1。サービス
  • http:// MachineName または MachineFQN /WcfService1/Service1。asmx
  • http:// MachineLocalIP#1 /WcfService1/Service1. サービス
  • http:// MachineLocalIP#1 /WcfService1/Service1. asmx
  • http:// MachineLocalIP#2 /WcfService1/Service1. サービス
  • http:// MachineLocalIP#2 /WcfService1/Service1. asmx
  • http:// ExternalIP /WcfService1/Service1. サービス
  • http:// ExternalIP /WcfService1/Service1. asmx

これらのテストはすべて、同様の結果を返すはずです。

サービス メソッドのテスト

気が向いたら、Web ブラウザーから、テスト済みの URL のいずれかについて、ASMX Web サービスでいくつかの Web メソッドをテストしてみてください。ASMX Web サービスを別の方法でテストできることもすぐにわかります...

次に、Visual Studio 2008 ディストリビューション ( C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE ) にあるWcfTestClient.exeアプリケーションを使用して、WCF サービスと ASMX Web サービスの両方で Web メソッドをテストします。

[ファイル] - > [サービスの追加] メニュー項目からサービスを追加する必要があります。テストする各サービス URL に対して上記の URL を入力します。SVC および ASMX ファイルのファイル名を必ず含めてください。すべてが順調であれば、web.config ファイル内の要素の「httpGetEnabled」属性によって有効化された MEX エンドポイントは<serviceMetadata/>、ユーティリティが動作するために必要なデータを返し、それによってツリーにサービス メソッドのインベントリを設定します。このような:

http://i.stack.imgur.com/mNK8l.jpg

この時点から、次のリソースを参照すると便利です。

結論

ここまでできれば、他の問題は発生しないと思います。サンプルの設定を、インターネットに公開しようとしている WCF サービスと比較してみてください。違いが明らかになることを願っています。

web.config が正しく設定されていることがわかっていることを前提として、診断中は WCF サービスを ASMX Web サービスのように扱うことを忘れないでください。

それでも問題が解決しない場合は、次のガイドで技術的なアドバイスを確認してください。

最後に、他のすべてが失敗した場合は、WCF サービスを ASMX Web サービスでラップするだけです。

于 2009-02-20T12:13:39.123 に答える
1

WSDL参照のリンクがローカルマシン名ではなくdonmain名を使用するように、IISでホストヘッダーを構成する必要があります。

WCFがWSDL参照でドメイン名を使用するようにIISホストヘッダーを構成する手順を確認してください 。

于 2009-02-21T10:03:00.940 に答える
1

ホスト名をいじる代わりに、サーバーに新しい IP アドレスを割り当ててみませんか? Windows Server は、同じ NIC に対して複数の IP アドレスを持つことができます。

それについて語っている記事はこちらです。

于 2009-02-24T13:34:22.593 に答える