ServiceContractAttribute ServiceContractAttribute ServiceContractAttribute ServiceContractAttribute Class

定義

インターフェイスまたはクラスが、Windows Communication Foundation (WCF) アプリケーション内にサービス コントラクトを定義することを示します。Indicates that an interface or a class defines a service contract in a Windows Communication Foundation (WCF) application.

public ref class ServiceContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface, Inherited=false)]
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface, AllowMultiple=false, Inherited=false)]
public sealed class ServiceContractAttribute : Attribute
type ServiceContractAttribute = class
    inherit Attribute
Public NotInheritable Class ServiceContractAttribute
Inherits Attribute
継承
ServiceContractAttributeServiceContractAttributeServiceContractAttributeServiceContractAttribute
属性

次のコード例は、ServiceContractAttribute をインターフェイスに適用し、OperationContractAttribute によって示される 1 つのサービス メソッドを持つサービス コントラクトを定義する方法を示しています。The following code example shows how to apply the ServiceContractAttribute to an interface to define a service contract with one service method, indicated by the OperationContractAttribute. この場合、すべてのメッセージのバインドで要求される保護レベルは ProtectionLevel.EncryptAndSign です。In this case, the protection level required of bindings for all messages is ProtectionLevel.EncryptAndSign.

その後、このコード例では、定義したコントラクトを SampleService クラスで実装します。The code example then implements that contract on the SampleService class.

using System;
using System.Collections.Generic;
using System.Net.Security;
using System.ServiceModel;
using System.Text;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Namespace="http://microsoft.wcf.documentation",
    Name="SampleService",
    ProtectionLevel=ProtectionLevel.EncryptAndSign
  )]
  public interface ISampleService{
    [OperationContract]
    string SampleMethod(string msg);
  }

  class SampleService : ISampleService
  {
  #region ISampleService Members

  public string  SampleMethod(string msg)
  {
 	  return "The service greets you: " + msg;
  }

  #endregion
  }
}


Imports System
Imports System.Collections.Generic
Imports System.Net.Security
Imports System.ServiceModel
Imports System.Text

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="http://microsoft.wcf.documentation", Name:="SampleService", ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
  Public Interface ISampleService
	<OperationContract> _
	Function SampleMethod(ByVal msg As String) As String
  End Interface

  Friend Class SampleService
	  Implements ISampleService
  #Region "ISampleService Members"

  Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
	   Return "The service greets you: " & msg
  End Function

  #End Region
  End Class
End Namespace

次のコード例は、上のサービス用の 1 つのエンドポイントを作成する単純な構成ファイルを示しています。The following code example shows a simple configuration file for the preceding service that creates one endpoint.

<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="mex"
      >
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/SampleService"/>
          </baseAddresses>
        </host>
        <endpoint
          address=""
          binding="wsHttpBinding"
          contract="Microsoft.WCF.Documentation.ISampleService"
         />
        <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange"
        />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mex">
          <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

次のコード例は、上の SampleService を呼び出す単純なクライアントを示しています。The following code example shows a simple client that invokes the preceding SampleService.

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
 
public class Client
{
  public static void Main()
  {
    // Picks up configuration from the config file.
    SampleServiceClient wcfClient = new SampleServiceClient();
    try
    {
        // Making calls.
        Console.WriteLine("Enter the greeting to send: ");
        string greeting = Console.ReadLine();
        Console.WriteLine("The service responded: " + wcfClient.SampleMethod(greeting));

        Console.WriteLine("Press ENTER to exit:");
        Console.ReadLine();

        // Done with service. 
        wcfClient.Close();
        Console.WriteLine("Done!");
    }
    catch (TimeoutException timeProblem)
    {
      Console.WriteLine("The service operation timed out. " + timeProblem.Message);
      wcfClient.Abort();
      Console.Read();
    }
    catch(CommunicationException commProblem)
    {
      Console.WriteLine("There was a communication problem. " + commProblem.Message);
      wcfClient.Abort();
      Console.Read();
    }
  }
}


Imports System
Imports System.ServiceModel
Imports System.ServiceModel.Channels

Public Class Client
  Public Shared Sub Main()
	' Picks up configuration from the config file.
	Dim wcfClient As New SampleServiceClient()
	Try
		' Making calls.
		Console.WriteLine("Enter the greeting to send: ")
            Dim greeting = Console.ReadLine()
		Console.WriteLine("The service responded: " & wcfClient.SampleMethod(greeting))

		Console.WriteLine("Press ENTER to exit:")
		Console.ReadLine()

		' Done with service. 
		wcfClient.Close()
		Console.WriteLine("Done!")
	Catch timeProblem As TimeoutException
	  Console.WriteLine("The service operation timed out. " & timeProblem.Message)
	  wcfClient.Abort()
	  Console.Read()
	Catch commProblem As CommunicationException
	  Console.WriteLine("There was a communication problem. " & commProblem.Message)
	  wcfClient.Abort()
	  Console.Read()
	End Try
  End Sub
End Class

注釈

インターフェイス (またはクラス) に対して ServiceContractAttribute 属性を使用して、サービス コントラクトを定義します。Use the ServiceContractAttribute attribute on an interface (or class) to define a service contract. その後、1 つ以上のクラス (またはインターフェイス) のメソッドに対して OperationContractAttribute 属性を使用して、コントラクトのサービス操作を定義します。Then use the OperationContractAttribute attribute on one or more of the class (or interface) methods to define the contract's service operations. サービス コントラクトの実装し、組み合わせると、バインドEndpointAddressオブジェクト、クライアントで使用するため、サービス コントラクトが公開されます。When the service contract is implemented and combined with a Bindings and an EndpointAddress object, the service contract is exposed for use by clients. 簡単な例を使用して、プロセスの概要については、次を参照してください。チュートリアル入門します。For an overview of the process using simple examples, see Getting Started Tutorial. サービス コントラクトを作成する方法の詳細については、次を参照してください。のデザインと実装サービスします。For more information about creating service contracts, see Designing and Implementing Services.

ServiceContractAttribute とそのインターフェイスで表現される情報は、Web サービス記述言語 (WSDL) の <portType> 要素に大まかに関連しています。The information expressed by a ServiceContractAttribute and its interface is loosely related to the Web Services Description Language (WSDL) <portType> element. サービス コントラクトは、呼び出し元に公開するサービスのエンドポイントを指定する、サービス側で使用されます。A service contract is used on the service side to specify what the service's endpoint exposes to callers. サービス コントラクトはクライアント側でも使用され、クライアントが通信を行うエンドポイントのコントラクトを指定します。双方向コントラクトの場合は、クライアントが双方向のメッセージ交換を行うために実装する必要があるコールバック コントラクトを (CallbackContract プロパティを使用して) 指定します。It is also used on the client side to specify the contract of the endpoint with which the client communicates and, in the case of duplex contracts, to specify the callback contract (using the CallbackContract property) that the client must implement in order to participate in a duplex conversation.

注意

さらに、ServiceContractAttribute で修飾したインターフェイスまたはクラスがなんらかの機能を公開するには、OperationContractAttribute 属性でマークされた、少なくとも 1 つのメソッドを持つ必要があります。An interface or class that is decorated with ServiceContractAttribute must also have at least one method marked with the OperationContractAttribute attribute to expose any functionality. この 2 つの属性を使用してサービスの定義と実装を行う最も単純な方法のコード例については、「使用例」のセクションを参照してください。See the Examples section for a code example of the simplest use of the two attributes to define and implement a service.

サービス コントラクトを変更するには、ServiceContractAttribute プロパティを使用します。Use the ServiceContractAttribute properties to modify the service contract.

  • ConfigurationName プロパティは、使用する構成ファイル内のサービス要素の名前を指定します。The ConfigurationName property specifies the name of the service element in the configuration file to use.

  • Name プロパティと Namespace プロパティは、WSDL の<portType> 要素内のコントラクトの名前と名前空間を制御します。The Name and Namespace properties control the name and namespace of the contract in the WSDL <portType> element.

  • SessionMode プロパティは、コントラクトがセッションをサポートするバインディングを必要とするかどうかを指定します。The SessionMode property specifies whether the contract requires a binding that supports sessions.

  • CallbackContract プロパティは、双方向 (二重) 通信で使用されるリターン コントラクトを指定します。The CallbackContract property specifies the return contract in a two-way (duplex) conversation.

  • HasProtectionLevel プロパティと ProtectionLevel プロパティは、このコントラクトをサポートするすべてのメッセージに明示的な ProtectionLevel 値が設定されているかどうかを示し、設定されている場合はそのレベルを示します。The HasProtectionLevel and ProtectionLevel properties indicate whether all messages supporting the contract have a explicit ProtectionLevel value, and if so, what that level is.

サービスはサービス コントラクトを実装します。サービス コントラクトは、サービスの種類がサポートするデータ交換を表します。Services implement service contracts, which represent the data exchange that a service type supports. サービス クラスは、ServiceContractAttribute でマークされたメソッドを持つ OperationContractAttribute でマークされたインターフェイスを実装することで、サービス コントラクトを実装できます。または、ServiceContractAttribute でマークし、OperationContractAttribute 属性を独自のメソッドに適用できます。A service class can implement a service contract (by implementing an interface marked with ServiceContractAttribute that has methods marked with OperationContractAttribute) or it can be marked with the ServiceContractAttribute and apply the OperationContractAttribute attribute to its own methods. (クラスが、ServiceContractAttribute でマークされたインターフェイスを実装する場合は、クラス自身を ServiceContractAttribute でマークすることはできません)。サービスの種類の OperationContractAttribute でマークされたメソッドは、サービスの種類自体によって指定される既定のサービス コントラクトの一部として処理されます。(If a class implements an interface marked with ServiceContractAttribute, it cannot be itself marked with ServiceContractAttribute.) Methods on service types that are marked with the OperationContractAttribute are treated as part of a default service contract specified by the service type itself. サービス操作の詳細については、OperationContractAttribute を参照してください。For details about service operations, see OperationContractAttribute.

既定では、Name プロパティと Namespace プロパティは、それぞれコントラクトの種類とhttp://tempuri.org であり、ProtectionLevelProtectionLevel.None です。By default, the Name and Namespace properties are the name of the contract type and http://tempuri.org, respectively, and ProtectionLevel is ProtectionLevel.None. サービス コントラクトでは、名前、名前空間、および保護レベルを、これらのプロパティを使用して明示的に設定することをお勧めします。It is recommended that service contracts explicitly set their names, namespaces, and protection levels using these properties. この作業により、次の 2 つの目標が達成されます。Doing so accomplishes two goals. 第 1 に、マネージド型情報に直接接続されないコントラクトを構築し、コントラクトを WSDL で表現するときに、コントラクトを壊さずにマネージド コードと名前空間をリファクタリングできます。First, it builds a contract that is not directly connected to the managed type information, enabling you to refactor your managed code and namespaces without breaking the contract as it is expressed in WSDL. 第 2 に、コントラクト自体の保護レベルを明示的に要求することによって、ランタイムがバインド構成でそのレベルのセキュリティがサポートされているかどうかを検証でき、それによって、機密情報を漏洩する不良な構成を回避できます。Second, explicitly requiring a certain level of protection on the contract itself enables the runtime to validate whether the binding configuration supports that level of security, preventing poor configuration from exposing sensitive information. 保護レベルの詳細については、次を参照してください。について保護レベルします。For more information about protection levels, see Understanding Protection Level.

クライアント アプリケーションで使用するためのサービスを公開するには、Windows Communication Foundation (WCF) サービス エンドポイントを登録するホスト アプリケーションを作成します。To expose a service for use by client applications, create a host application to register your service endpoint with Windows Communication Foundation (WCF). コンソール アプリケーション、Windows サービス アプリケーション、ASP.NET アプリケーション、Windows フォーム アプリケーション、またはその他の種類のアプリケーション ドメインで Windows アクティベーション サービス (WAS) を使用して WCF サービスをホストすることができます。You can host WCF services using Windows Activation Services (WAS), in console applications, Windows Service applications, ASP.NET applications, Windows Forms applications, or any other kind of application domain.

WAS でのホスティングは、ASP.NET アプリケーションの作成とほとんど同じです。Hosting in the WAS is very similar to creating an ASP.NET application. 詳細については、「方法: IIS で WCF サービスをホストします。For details, see How to: Host a WCF Service in IIS.

クライアントは、サービス コントラクト インターフェイス (ServiceContractAttribute でマークされたインターフェイス) を使用してサービスへのチャネルを作成するか、またはクライアント オブジェクト (サービス コントラクト インターフェイスの型情報と ClientBase<TChannel> クラスの組み合わせ) を使用してサービスと通信します。Clients either use the service contract interface (the interface marked with ServiceContractAttribute) to create a channel to the service or they use the client objects (which combine the type information of the service contract interface with the ClientBase<TChannel> class) to communicate with your service. 詳細については、サービスへのクライアント チャネルは、次を参照してください。、ChannelFactory<TChannel>クラスとWCF Client Overviewします。For details on client channels to services, see the ChannelFactory<TChannel> class and WCF Client Overview.

ServiceContractAttribute クラスまたはインターフェイスを使用して別の ServiceContractAttribute クラスまたはインターフェイスから継承すると、親コントラクトが拡張されます。Using a ServiceContractAttribute class or interface to inherit from another ServiceContractAttribute class or interface extends the parent contract. たとえば、IChildContract インターフェイスが ServiceContractAttribute でマークされ、別のサービス コントラクト インターフェイスである IParentContract から継承された場合、IChildContract サービス コントラクトには、IParentContractIChildContract の両方のメソッドが含まれます。For example, if an IChildContract interface is marked with ServiceContractAttribute and inherited from another service contract interface, IParentContract, the IChildContract service contract contains the methods of both IParentContract and IChildContract. コントラクト (クラスまたはインターフェイス) の拡張は、マネージド クラスとマネージド インターフェイスの拡張とほとんど同じです。Extending contracts (whether on classes or interfaces) is very similar to extending managed classes and interfaces.

サービスを作成する最も柔軟な方法は、最初にサービス コントラクト インターフェイスを定義し、その後、サービス クラスでそのインターフェイスを実装することです。The most flexible approach to creating services is to define service contract interfaces first and then have your service class implement that interface. (これは、定義済みのサービス コントラクトを実装する必要がある場合に、サービスを構築するための最も簡単な方法でもあります)。クラスを ServiceContractAttribute でマークし、メソッドを OperationContractAttribute でマークすることで直接サービスを構築する方法は、サービスが 1 つのコントラクトを公開する場合に適しています (ただし、そのコントラクトは、複数のエンドポイントによって公開できます)。(This is also the simplest way to build your services if you must implement service contracts that have been defined by others.) Building services directly by marking a class with ServiceContractAttribute and its methods with OperationContractAttribute works when the service exposes only one contract (but that contract can be exposed by more than one endpoint).

使用して、CallbackContractを別のサービス コントラクト、と共に元のサービス コントラクト、バインドされている場合を定義することができますをフローしない 2 つの方法で個別にメッセージ交換を示すプロパティです。Use the CallbackContract property to indicate another service contract that, when bound together with the original service contract, define a message exchange that can flow in two ways independently. 詳細については、「CallbackContract」を参照してください。For details, see CallbackContract.

コンストラクター

ServiceContractAttribute() ServiceContractAttribute() ServiceContractAttribute() ServiceContractAttribute()

ServiceContractAttribute クラスの新しいインスタンスを初期化します。Initializes a new instance of the ServiceContractAttribute class.

プロパティ

CallbackContract CallbackContract CallbackContract CallbackContract

コントラクトが双方向コントラクトの場合のコールバック コントラクトの型を取得または設定します。Gets or sets the type of callback contract when the contract is a duplex contract.

ConfigurationName ConfigurationName ConfigurationName ConfigurationName

アプリケーション構成ファイル内でサービスを検索するために使用される名前を取得または設定します。Gets or sets the name used to locate the service in an application configuration file.

HasProtectionLevel HasProtectionLevel HasProtectionLevel HasProtectionLevel

メンバーに保護レベルが割り当てられているかどうかを示す値を取得します。Gets a value that indicates whether the member has a protection level assigned.

Name Name Name Name

Web サービス記述言語 (WSDL) での <portType> 要素の名前を取得または設定します。Gets or sets the name for the <portType> element in Web Services Description Language (WSDL).

Namespace Namespace Namespace Namespace

Web サービス記述言語 (WSDL) での <portType> 要素の名前空間を取得または設定します。Gets or sets the namespace of the <portType> element in Web Services Description Language (WSDL).

ProtectionLevel ProtectionLevel ProtectionLevel ProtectionLevel

コントラクトのバインドで、ProtectionLevel プロパティの値をサポートする必要があるかどうかを指定します。Specifies whether the binding for the contract must support the value of the ProtectionLevel property.

SessionMode SessionMode SessionMode SessionMode

セッションが許可されるか、許可されないか、または必要であるかを示す値を取得または設定します。Gets or sets whether sessions are allowed, not allowed or required.

TypeId TypeId TypeId TypeId

派生クラスで実装されると、この Attribute の一意の識別子を取得します。When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)

メソッド

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

このインスタンスが、指定されたオブジェクトと等価であるかどうかを示す値を返します。Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

このインスタンスのハッシュ コードを返します。Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

派生クラスでオーバーライドされるとき、このインスタンスの値が派生クラスの既定値であるかどうかを示します。When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

明示的なインターフェイスの実装

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

一連の名前を対応する一連のディスパッチ識別子に割り当てます。Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

オブジェクトの型情報を取得します。この情報はインターフェイスの型情報の取得に使用できます。Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

オブジェクトが提供する型情報インターフェイスの数 (0 または 1) を取得します。Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

適用対象

こちらもご覧ください