0

私は WCF の公式の基本的なチュートリアルに従おうとしています: https://docs.microsoft.com/en-us/dotnet/framework/wcf/getting-started-tutorial

ある時点で、サービス コントラクトを定義するときに、チュートリアルでは次のコードを入力するよう求められます

using System;
using System.ServiceModel;

namespace GettingStartedLib
{
        [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
        public interface ICalculator
        {
            [OperationContract]
            double Add(double n1, double n2);
            [OperationContract]
            double Subtract(double n1, double n2);
            [OperationContract]
            double Multiply(double n1, double n2);
            [OperationContract]
            double Divide(double n1, double n2);
        }
}

私はServiceContract属性、特に奇妙な名前空間に非常に混乱しています:http://Microsoft.ServiceModel.Samples

この名前空間は何ですか?

のドキュメントServiceContractAttributeを検索しようとしましたが、ここで何が起こっているのかまだわかりません。

デフォルトでは、Name プロパティと Namespace プロパティはコントラクト タイプの名前であり、http://tempuri.orgです。であり、ProtectionLevel は ProtectionLevel.None です。これらのプロパティを使用して、サービス コントラクトで名前、名前空間、および保護レベルを明示的に設定することをお勧めします。そうすることで、2 つの目標が達成されます。まず、マネージド型情報に直接接続されていないコントラクトを構築するため、WSDL で表現されているコントラクトを破ることなく、マネージド コードと名前空間をリファクタリングできます。次に、コントラクト自体に特定レベルの保護を明示的に要求することで、バインディング構成がそのレベルのセキュリティをサポートしているかどうかをランタイムが検証できるようになり、不適切な構成による機密情報の公開を防ぐことができます。保護レベルの詳細については、保護レベルについてを参照してください。

この名前空間は何ですか? この属性を何に設定すればよいですか? 好きな弦は?特定の形式の文字列? そこに何を入れるかを決めるとき、何を考慮に入れる必要がありますか?

両方の例 (http://Microsoft.ServiceModel.Sampleshttp://tempuri.org) は、HTTP アドレスを入力する必要があることを示唆しています。しかし、どの HTTP アドレスですか? 何か意味のあることをするサーバーをこのアドレスで運用する必要がありますか? このサーバーは何をすべきですか? これらの例と、http://tempuri.org(推奨されていなくても) 許可されているという事実に基づいて、この名前空間が私の WCF サービスのアドレスに設定されることは想定されていないことを理解していますか? (そうしないhttp://tempuri.orgと、サービスが tempuri.org ではなく localhost でホストされているため、ローカルでホストされているサンプルの WCF サービスでも機能しないことを理解しています!`

そして、何http://Microsoft.ServiceModel.Samplesですか??? それは有効なHTTPアドレスですか?もしそうなら、どのような形式で?(私が見たときhttp://something、これはIPアドレスまたはDNSの助けを借りてIPアドレスに解決できるドメインのいずれかであると予想されますがMicrosoft.ServiceModel.Samples、これら2つのどちらでもないようです)http://Microsoft.ServiceModel.Samplesブラウザに入力しようとしましたが、当然のことながら、サーバーが見つかりませんというエラーが表示されました。

この名前空間の意味は何ですか? そして、そこに何を置きますか?

4

2 に答える 2

0

@Theobald Duは、「これは一般向けサービスでのみ一般的です」と述べました。いい答えです。以下の別のリンクは、公開されているサービス コントラクト (サービスにリモートでアクセスするオンラインのパブリック クライアントなど) で使用される場合の名前空間の目的を理解するのに役立つ可能性があります。

  <https://stackoverflow.com/questions/3519014/wcf-versioning-update-attribute-namespaces-and-support-previous-namespaces?rq=1>

このリンクは、サービスが更新またはアップグレードされた後、パブリッククライアントが「インターフェース」のどのバージョンが新しいバージョンであるかを知る必要がある場合、サービス契約属性の名前空間が必要であると述べています。

新しく更新されたインターフェイスを使用したいパブリック クライアントの場合、クライアント プロキシを変更して、新しい「名前空間」で識別されるサービスの新しいバージョンを使用します。新しいバージョンのサービスを使用したくない、または使用する必要がない場合は、現在使用しているクライアントを変更する必要はありません。

少なくとも、サービス コントラクト属性の名前空間の値が使用されるのはこれだと思います。[ServiceContract] 属性で名前空間を使用しません。これは、ユーザー インターフェイス、クライアント プロキシ、およびサービス アプリケーションが「公開」されていないためですが、すべてが Winforms デスクトップ アプリケーション ソリューションの一部であり、Entity Framework を使用してリモート データベースにアクセスするためです。および WCF サービス (http SOAP)。

于 2020-12-09T04:19:33.437 に答える