本文整理汇总了C#中System.Runtime.Remoting.ObjRef.HasProxyAttribute方法的典型用法代码示例。如果您正苦于以下问题:C# ObjRef.HasProxyAttribute方法的具体用法?C# ObjRef.HasProxyAttribute怎么用?C# ObjRef.HasProxyAttribute使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Runtime.Remoting.ObjRef
的用法示例。
在下文中一共展示了ObjRef.HasProxyAttribute方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: InternalUnmarshal
//.........这里部分代码省略.........
// If we successfully completed the above method then we should
// have an identity object
BCLDebug.Assert(null != idObj,"null != idObj");
Message.DebugOut("RemotingService::InternalUnmarshal IN URI" + objectRef.URI);
Message.DebugOut("RemotingServices::InternalUnmarshal: <Begin> Current context id: " +
(currContext.ContextID).ToString("x") + "\n");
// Check whether we are on the server side or client-side
ServerIdentity serverID = idObj as ServerIdentity;
if ( serverID != null )
{
Message.DebugOut("RemotingServices::InternalUnmarshal: Unmarshalling ServerIdentity\n");
// SERVER SIDE
// We are in the app domain of the server object.
// If we are in the same context as the server then
// just return the server object else return the proxy
currContext = Thread.CurrentContext;
Message.DebugOut("RemotingServices::InternalUnmarshal: Current context id: " +
(currContext.ContextID).ToString("x") + "\n");
Message.DebugOut("RemotingServices::InternalUnmarshal: ServerContext id: " +
(serverID.ServerContext.ContextID).ToString("x") + "\n");
if (!serverID.IsContextBound)
{
BCLDebug.Assert(serverID.ServerType.IsMarshalByRef,
"Object must be at least MarshalByRef in order to be marshaled");
if (proxy != null)
{
throw new ArgumentException(
String.Format(
CultureInfo.CurrentCulture, Environment.GetResourceString(
"Remoting_BadInternalState_ProxySameAppDomain")));
}
obj = serverID.TPOrObject;
}
else
{
Message.DebugOut("RemotingServices::InternalUnmarshal: Contexts don't match, returning proxy\n");
IMessageSink chnlSink = null;
IMessageSink envoySink = null;
// Create the envoy sinks and channel sink
CreateEnvoyAndChannelSinks(
(MarshalByRefObject)serverID.TPOrObject,
null,
out chnlSink,
out envoySink);
// Set the envoy and channel sinks in a thread safe manner
SetEnvoyAndChannelSinks(idObj, chnlSink, envoySink);
// Get or create the proxy and return
obj = GetOrCreateProxy(idObj, proxy, true);
// This will be a TP
BCLDebug.Assert(IsTransparentProxy(obj), "Unexpected server");
}
}
else
{
// CLIENT SIDE
Message.DebugOut("RemotingServices::InternalUnmarshal: Unmarshalling Client-side Identity\n");
IMessageSink chnlSink = null;
IMessageSink envoySink = null;
// Create the envoy sinks and channel sink
if (!objectRef.IsObjRefLite())
CreateEnvoyAndChannelSinks(null, objectRef, out chnlSink, out envoySink);
else
CreateEnvoyAndChannelSinks(objectRef.URI, null, out chnlSink, out envoySink);
// Set the envoy and channel sinks in a thread safe manner
SetEnvoyAndChannelSinks(idObj, chnlSink, envoySink);
if (objectRef.HasProxyAttribute())
{
fRefine = true;
}
// Get or create the proxy and return
obj = GetOrCreateProxy(idObj, proxy, fRefine);
}
// Notify TrackingServices that we unmarshaled an object
TrackingServices.UnmarshaledObject(obj, objectRef);
// Return the proxy
Message.DebugOut("RemotingService::InternalUnmarshl OUT \n");
return obj;
}
示例2: InternalUnmarshal
internal static object InternalUnmarshal(ObjRef objectRef, object proxy, bool fRefine)
{
object tPOrObject = null;
Identity idObj = null;
Context currentContext = Thread.CurrentContext;
if (!ObjRef.IsWellFormed(objectRef))
{
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_BadObjRef"), new object[] { "Unmarshal" }));
}
if (objectRef.IsWellKnown())
{
tPOrObject = Unmarshal(typeof(MarshalByRefObject), objectRef.URI);
idObj = IdentityHolder.ResolveIdentity(objectRef.URI);
if (idObj.ObjectRef == null)
{
idObj.RaceSetObjRef(objectRef);
}
return tPOrObject;
}
idObj = IdentityHolder.FindOrCreateIdentity(objectRef.URI, null, objectRef);
Context context2 = Thread.CurrentContext;
ServerIdentity identity2 = idObj as ServerIdentity;
if (identity2 != null)
{
Context context3 = Thread.CurrentContext;
if (!identity2.IsContextBound)
{
if (proxy != null)
{
throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_BadInternalState_ProxySameAppDomain"), new object[0]));
}
tPOrObject = identity2.TPOrObject;
}
else
{
IMessageSink chnlSink = null;
IMessageSink envoySink = null;
CreateEnvoyAndChannelSinks(identity2.TPOrObject, null, out chnlSink, out envoySink);
SetEnvoyAndChannelSinks(idObj, chnlSink, envoySink);
tPOrObject = GetOrCreateProxy(idObj, proxy, true);
}
}
else
{
IMessageSink sink3 = null;
IMessageSink sink4 = null;
if (!objectRef.IsObjRefLite())
{
CreateEnvoyAndChannelSinks(null, objectRef, out sink3, out sink4);
}
else
{
CreateEnvoyAndChannelSinks(objectRef.URI, null, out sink3, out sink4);
}
SetEnvoyAndChannelSinks(idObj, sink3, sink4);
if (objectRef.HasProxyAttribute())
{
fRefine = true;
}
tPOrObject = GetOrCreateProxy(idObj, proxy, fRefine);
}
TrackingServices.UnmarshaledObject(tPOrObject, objectRef);
return tPOrObject;
}