3

現在、WCF を実装フレームワークとして使用して、単純なサービス指向アーキテクチャを設計中です。少数のアプリケーションが使用する少数のサービスがあります。これらのサービスは主に内部で使用されるため、基本的な認証および承認スキーム (Windows ベースなど) で十分です。

ただし、一部のサービスを一部のビジネス パートナーに公開したいと考えています。アクセスできる一連のサービスは、契約によって異なります。標準的なアーキテクチャの一種。

リクエストを認証し、正しい内部サービス エンドポイント (これは単純な ESB に似ています) に中継するサービス ゲートウェイを実装できると思います。これにより、認証/承認コードを集中化し、単一のエンドポイントを世界に公開できます。利用可能な ESB ツールキットをいくつか調べましたが、この目的には複雑すぎるようです。多くの異なるサービスを統合する必要はありませんが、それらの一部をインターネットに公開するだけです.

このようなリレー/ルーターを WCF で設計して実装し、非常にシンプルにするにはどうすればよいですか? 私はInside Windows Communication Foundationを読みましたが、これは良い本ですが、どのように始めればよいかについてはまだ十分な自信がありません。

4

3 に答える 3

3

私はこれと非常によく似たことをしました。できることは、1 回の操作でエンドポイントを公開することです。

その操作は次のようになります

[OperationContract(Namespace="www.fu.com", Action="*")]
void CallThis(Message msg);

必要な操作を呼び出すことを意図したサービス用のプロキシをクライアントに使用させます。次に、エンドポイント/サービスを指すように構成を変更してもらいます。「CallThis」メソッドは、署名に関係なく、すべての操作を受け入れます。Message パラメーターは WCF メッセージです。

どこに行くべきかを判断するために必要なことを行いますが、内部エンドポイントに移動するには「To」を変更する必要があります。

私は実際にこれを完全に実装しているので、質問がある場合はお知らせください。

ジョー。

于 2008-12-15T14:31:36.480 に答える
2

次のようにインターフェースを構築するだけで十分なようです。

[OperationContract(Action="*", ReplyAction="*")]
Message CallThis(Message msg);

この投稿は、 Messageオブジェクトを「いじる」ことによってCallThisメソッドを実装するのにも役立つことがわかりました。CallThisメソッドの基本的な実装は次のとおりです。

public Message CallThis(Message message) {
    MessageBuffer buffer = message.CreateBufferedCopy(524288);
    Message output = buffer.CreateMessage();
    output.Headers.To = <INTERNAL_SERVICE_URI>;

    BasicHttpBinding binding = new BasicHttpBinding();
    IChannelFactory<IRequestChannel> factory = binding.BuildChannelFactory<IRequestChannel>(<INTERNAL_SERVICE_URI>);
    factory.Open();

    IRequestChannel channel = factory.CreateChannel(new EndpointAddress(<INTERNAL_SERVICE_URI>));
    channel.Open();

    Message result = channel.Request(output);

    message.Close();
    output.Close();
    factory.Close();
    channel.Close();

    return result;
}

認証と認可の追加は非常に簡単です。

于 2008-12-15T15:57:10.677 に答える
1

回答の 1 つが .NET 4 の RoutingService を示唆しているこの SO の質問を確認してください。WCFへの非常に素晴らしい追加。

于 2010-03-17T18:50:16.157 に答える