5

更新 3:
Visual Studio 2008 テスト プロジェクトを作成し、共有サイト WCF サービス参照へのサービス参照を作成しようとしたところ、次のエラーが発生しました。

「 http://apps.mydomain/MyService.svc 」のダウンロード中にエラーが発生しました。リクエストは HTTP ステータス 400: Bad Request で失敗しました。メタデータに解決できない参照が含まれています: ' 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.mydomainhttp:
//apps2.mydomain の間で IIS 構成設定の競合がいくつかあり、「サーバー アプリケーションを使用できません」エラーを回避することができました。

共有サイト ( http://apps.mydomain )を参照しようとすると 404 エラーが発生しますが、 http://apps1.mydomainおよびhttp://apps2.mydomainサービスを参照できます。参照。

元の問題

私の会社ではMicrosoft NLBを使用して、IIS サーバー間のトラフィックの負荷を分散しています。最近、各 IIS 6 Windows Server 2003 Standard Edition SP1 サーバーに WCF サービスを展開しました。IE 7 を使用して共有ドメイン名を参照しようとすると、次のエラーが表示されました。

サーバー アプリケーションを利用できません この Web サーバーでアクセスしようとしている Web アプリケーションは、現在利用できません。Web ブラウザの [更新] ボタンをクリックして、リクエストを再試行してください。

管理者注: この特定の要求の失敗の原因を詳述するエラー メッセージは、Web サーバーのアプリケーション イベント ログにあります。このログ エントリを確認して、このエラーが発生した原因を特定してください。

コンシューマーはサービスを使用するためにhttp://apps.mydomainを指しますが、仮想ドメインはhttp://apps1.mydomainまたはhttp: //apps2.mydomain にマップされます。各サーバーのサービスを参照しても、そのエラーは表示されません。

サービスは現在、匿名の basicHttpBinding を使用しています。

他の誰かがこの問題を経験しましたか?

歴史

このエラーが発生する前に、3 つのドメイン名 ( http://apps.mydomainhttp://apps1.mydomainhttp://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" %>
4

2 に答える 2

2

私のWCFサービスと消費アプリケーションのさまざまな構成を試した後。使用中のアプリケーションで、動作中のサービス参照 ( http://apps1.mydomainまたはhttp://apps2.mydomain ) の1 つへのサービス参照を作成しました。次に、クライアント構成のエンドポイント参照を共有サイトの WCF アドレス ( http://apps.mydomain ) を指すように変更すると、サービスを利用して使用できるようになりました。

于 2009-01-29T20:45:23.890 に答える
1

I've had an issue before with WCF and load balancing where the servers had multiple Network cards with different IP addresses and WCF would just pic the first IP address it found. We had to explicitly set the IP address on each server's Service Definition so WCF would bind to the right one.

于 2009-01-27T22:55:05.320 に答える