WCFでのContractsの理解
12593 ワード
WCFでのContracts
WCFはContractによってサービスと操作を説明し、一般的に5種類のContract:ServiceContract、OperationContract、FaultContract、DataContract、MessageContractを含む.
1.ServiceContract
ServiceContractは、サービス名、ネーミングスペースなどのサーバ側の構成情報を含むサービスインタフェースを外部に漏らす.
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
2.OperationContract
OperationContract定義はServiceContractの内部にあり、具体的なサービス操作が定義されています.これに基づいて、オペレーションのトランザクション、バインド(One-way、Two-wayなど)、FaultContract情報を作成できます.
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
3.Data Contract
サーバとクライアントが対話するコンテンツが定義され、クラスを識別してOperationContractのパラメータまたは戻りタイプとして使用できます.
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
4.MessageContract
OperationContractでパラメータを渡すか、値を返す必要がある場合は、MessageContractを使用します.メッセージのHeaderやBody、セキュリティなどを定義できます.
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
5.FaultContract
FaultContractは、サービスが発生する可能性のある例外情報と、サービスキューのエラーの処理とエラー情報がクライアントに投げ出される内容を定義します.1つのOperationContactは、0つ以上のFaultContractを含むことができる.
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
MessageContractとDataContractの比較
区別する
DataContractは、NetのCLRタイプは、他のアプリケーションによって識別可能なW 3 CベースXmlの方法にマッピングされ、異なるアプリケーション間でどのようなタイプのデータが使用されているかを考慮する必要がなく、抽象的なXml情報に注目するだけでよい.
MessageContractはSOAPメッセージの構造を記述し,最終的にはサーバとクライアントで伝達されるため,SOAP情報のHeaderとBodiesに直接アクセスして処理することができ,複雑なタイプを処理することができる.
MessageContractを使用する理由
MessageContractは、通常、特定のHeader、Footerなどの情報を追加するなど、メッセージボディを直接制御する必要がある場合にのみ使用されます.場合によっては、メッセージにセッション関連の情報を含める必要がある場合、Headerを介して伝達する必要がある場合、メッセージボディに追加のパラメータを追加する必要はありません.あるいは、カスタムのセキュリティプロトコルを提供したり、アプリケーション間でアイデンティティトークンを渡したりする必要があります.
もちろん、MessageContractを使用する場合は、直接シーケンス化して処理するのではなく、SOAPヘッダから情報を取得する必要があります.
MessageContractとDataContractを混在させない
1つのOperationContractでは、パラメータと戻り値にそれぞれMessageContractとDataContractを使用しないでください.そうしないと、WSDLの生成時にランタイムエラーが発生します.
WCFはContractによってサービスと操作を説明し、一般的に5種類のContract:ServiceContract、OperationContract、FaultContract、DataContract、MessageContractを含む.
1.ServiceContract
ServiceContractは、サービス名、ネーミングスペースなどのサーバ側の構成情報を含むサービスインタフェースを外部に漏らす.
1: [ServiceContract]
2: interface IMyContract
3: {
4: [OperationContract]
5: string MyMethod();
6: }
7:
8: class MyService : IMyContract
9: {
10: public string MyMethod()
11: {
12: return "Hello World";
13: }
14: }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
2.OperationContract
OperationContract定義はServiceContractの内部にあり、具体的なサービス操作が定義されています.これに基づいて、オペレーションのトランザクション、バインド(One-way、Two-wayなど)、FaultContract情報を作成できます.
1: [ServiceContract]
2: interface IMyContract
3: {
4: [FaultContract(typeof(MyFaultContract))]
5: [OperationContract]
6: string MyMethod();
7: }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
3.Data Contract
サーバとクライアントが対話するコンテンツが定義され、クラスを識別してOperationContractのパラメータまたは戻りタイプとして使用できます.
1: [DataContract]
2: class Person
3: {
4: [DataMember]
5: public string ID;
6: [DataMember]
7: public string Name;
8: }
9:
10: [ServiceContract]
11: interface IMyContract
12: {
13: [OperationContract]
14: Person GetPerson(int ID);
15: }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
4.MessageContract
OperationContractでパラメータを渡すか、値を返す必要がある場合は、MessageContractを使用します.メッセージのHeaderやBody、セキュリティなどを定義できます.
1: [ServiceContract]
2: public interface IRentalService
3: {
4: [OperationContract]
5: double CalPrice(PriceCalculate request);
6: }
7:
8: [MessageContract]
9: public class PriceCalculate
10: {
11: [MessageHeader]
12: public MyHeader SoapHeader { get; set; }
13: [MessageBodyMember]
14: public PriceCal PriceCalculation { get; set; }
15: }
16:
17: [DataContract]
18: public class MyHeader
19: {
20: [DataMember]
21: public string UserID { get; set; }
22: }
23:
24: [DataContract]
25: public class PriceCal
26: {
27: [DataMember]
28: public DateTime PickupDateTime { get; set; }
29: [DataMember]
30: public DateTime ReturnDateTime { get; set; }
31: [DataMember]
32: public string PickupLocation { get; set; }
33: [DataMember]
34: public string ReturnLocation { get; set; }
35: }
36:
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
5.FaultContract
FaultContractは、サービスが発生する可能性のある例外情報と、サービスキューのエラーの処理とエラー情報がクライアントに投げ出される内容を定義します.1つのOperationContactは、0つ以上のFaultContractを含むことができる.
1: [ServiceContract]
2: interface IMyContract
3: {
4: [FaultContract(typeof(MyFaultContract1))]
5: [FaultContract(typeof(MyFaultContract2))]
6: [OperationContract]
7: string MyMethod();
8:
9: [OperationContract]
10: string MyShow();
11: }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
MessageContractとDataContractの比較
区別する
DataContractは、NetのCLRタイプは、他のアプリケーションによって識別可能なW 3 CベースXmlの方法にマッピングされ、異なるアプリケーション間でどのようなタイプのデータが使用されているかを考慮する必要がなく、抽象的なXml情報に注目するだけでよい.
MessageContractはSOAPメッセージの構造を記述し,最終的にはサーバとクライアントで伝達されるため,SOAP情報のHeaderとBodiesに直接アクセスして処理することができ,複雑なタイプを処理することができる.
MessageContractを使用する理由
MessageContractは、通常、特定のHeader、Footerなどの情報を追加するなど、メッセージボディを直接制御する必要がある場合にのみ使用されます.場合によっては、メッセージにセッション関連の情報を含める必要がある場合、Headerを介して伝達する必要がある場合、メッセージボディに追加のパラメータを追加する必要はありません.あるいは、カスタムのセキュリティプロトコルを提供したり、アプリケーション間でアイデンティティトークンを渡したりする必要があります.
もちろん、MessageContractを使用する場合は、直接シーケンス化して処理するのではなく、SOAPヘッダから情報を取得する必要があります.
MessageContractとDataContractを混在させない
1つのOperationContractでは、パラメータと戻り値にそれぞれMessageContractとDataContractを使用しないでください.そうしないと、WSDLの生成時にランタイムエラーが発生します.