1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel
{
using System.Net.Security;
using System.Reflection;
using System.ServiceModel.Description;
using System.ServiceModel.Security;
[AttributeUsage(ServiceModelAttributeTargets.OperationContract)]
public sealed class OperationContractAttribute : Attribute
{
string name = null;
string action = null;
string replyAction = null;
bool asyncPattern = false;
bool isInitiating = true;
bool isTerminating = false;
bool isOneWay = false;
ProtectionLevel protectionLevel = ProtectionLevel.None;
bool hasProtectionLevel = false;
public string Name
{
get { return this.name; }
set
{
if (value == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
}
if (value == "")
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value",
SR.GetString(SR.SFxNameCannotBeEmpty)));
}
this.name = value;
}
}
internal const string ActionPropertyName = "Action";
public string Action
{
get { return this.action; }
set
{
if (value == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
}
this.action = value;
}
}
internal const string ProtectionLevelPropertyName = "ProtectionLevel";
public ProtectionLevel ProtectionLevel
{
get
{
return this.protectionLevel;
}
set
{
if (!ProtectionLevelHelper.IsDefined(value))
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
this.protectionLevel = value;
this.hasProtectionLevel = true;
}
}
public bool HasProtectionLevel
{
get { return this.hasProtectionLevel; }
}
internal const string ReplyActionPropertyName = "ReplyAction";
public string ReplyAction
{
get { return this.replyAction; }
set
{
if (value == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
}
this.replyAction = value;
}
}
public bool AsyncPattern
{
get { return this.asyncPattern; }
set { this.asyncPattern = value; }
}
public bool IsOneWay
{
get { return this.isOneWay; }
set { this.isOneWay = value; }
}
public bool IsInitiating
{
get { return this.isInitiating; }
set { this.isInitiating = value; }
}
public bool IsTerminating
{
get { return this.isTerminating; }
set { this.isTerminating = value; }
}
internal bool IsSessionOpenNotificationEnabled
{
get
{
return this.Action == OperationDescription.SessionOpenedAction;
}
}
internal void EnsureInvariants(MethodInfo methodInfo, string operationName)
{
if (this.IsSessionOpenNotificationEnabled)
{
if (!this.IsOneWay
|| !this.IsInitiating
|| methodInfo.GetParameters().Length > 0)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
SR.GetString(SR.ContractIsNotSelfConsistentWhenIsSessionOpenNotificationEnabled, operationName, "Action", OperationDescription.SessionOpenedAction, "IsOneWay", "IsInitiating")));
}
}
}
}
}
|