WCFサービスでの負荷分散エラー-NLB
-
19-08-2019 - |
質問
更新3:
Visual Studio 2008テストプロジェクトを作成し、共有サイトWCFサービス参照へのサービス参照を作成しようとしましたが、次のエラーを受け取りました:
ダウンロード中にエラーが発生しました ' http://apps.mydomain/MyService.svc '。 HTTPステータスでリクエストが失敗しました 400不正な要求。メタデータには 解決できない参照: ' http://apps.mydomain/MyService.svc '。 コンテンツタイプapplication / soap + xml。 charset = utf-8はサポートされていません サービス http://apps.mydomain/MyService.svc '。 クライアントとサービスのバインディングは 不一致。返されたリモートサーバー エラー:(415)処理できません コンテンツタイプ 'application / soap + xml; charset = utf-8 ' 予期されたタイプ 'text / xmlではありません。 charset = utf-8 '..サービスが 現在のソリューションで定義されている、試してください ソリューションの構築と追加 サービス参照を再度。
更新2:
@Nick-各エンドポイントのアドレスを各サーバーの完全修飾パスで明示的に設定するという提案を試みましたが、それでも同じ結果が得られます。
また、共有サイトのURLでlistenUri属性を設定しようとすると、404エラーの代わりに400 bad requestエラーが表示されます。
更新
いくつかの追加調査の後、 http://apps1.mydomain と http://apps2.mydomain で、<!> quot; Server Application Unavailable <!> quot;を超えることができました。エラー。
共有サイトを参照しようとすると404エラーが表示されます( http://apps.mydomain )、しかし http://apps1.mydomain および http://apps2.mydomain サービスリファレンス。
元の問題
私の会社は、 Microsoft NLB を使用して、トラフィックを負荷分散しますIISサーバー。私は最近、各IIS 6 Windows Server 2003 Standard Edition SP1サーバーにWCFサービスを展開しました。 IE 7を使用して共有ドメイン名を参照しようとすると、次のエラーが表示されました。
サーバーアプリケーションは利用できません あなたがしようとしているウェブアプリケーション このWebサーバー上のアクセスは現在 利用できません。 <!> quot; Refresh <!> quot;を押してください。 再試行するWebブラウザのボタン あなたの要求。
管理者注:エラーメッセージ この特定の原因の詳細 リクエストの失敗は Webのアプリケーションイベントログ サーバ。このログエントリを確認してください このエラーの原因を発見する 発生します。
コンシューマはサービスを使用するために http://apps.mydomain をポイントしますが、仮想ドメインは http://apps1.mydomain または http://apps2.mydomain 。各サーバーのサービスを参照しても、そのエラーは表示されません。
サービスは現在、匿名のbasicHttpBindingを使用しています。
他の誰かがこの問題を経験しましたか?
履歴
このエラーが発生する前に、3つすべてのドメイン名( http://apps.mydomain 、 http://apps1.mydomain 、 http://apps2.mydomain ):
このコレクションには既に スキームhttpを使用したアドレス。できます スキームごとに最大1つのアドレスである このコレクション。
ServiceHostFactory クラスを使用しました.svcファイルをカスタマイズして、カスタムサービスファクトリを指定します。次に、ServiceHostFactoryから継承し、必要に応じてオーバーライドすることにより、カスタムファクトリを作成します。
public class MyFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new ServiceHost(serviceType, baseAddresses[0]);
}
}
<%@ ServiceHost Language="C#" Factory="MyFactory" Debug="true" Service="MyService" CodeBehind="~/App_Code/MyService.cs" %>
解決
WCFサービスと消費アプリケーションのさまざまな構成を試してみました。作業中のサービス参照の1つへのサービス参照を作成しました( http://apps1.mydomain または http://apps2.mydomain )を使用しているアプリケーションで。次に、共有サイトのWCFアドレス( http://apps.mydomain を指すように、クライアント構成のエンドポイント参照を変更しました。 )そして、サービスを利用して使用することができました。
他のヒント
WCFとロードバランシングで以前に問題が発生し、サーバーに異なるIPアドレスを持つ複数のネットワークカードがあり、WCFは最初に見つかったIPアドレスを検出するだけでした。 WCFが正しいサーバーにバインドするように、各サーバーのサービス定義にIPアドレスを明示的に設定する必要がありました。