//解析WellKnown对象 void ParseWellKnownServerObjectSection(XmlNode root) { foreach (XmlNode node in root.ChildNodes) { if (node.NodeType == XmlNodeType.Comment) { continue; } if (node.Name != "add") { continue; } string objectUri = base.GetStringAttribute(node, "objectUri"); if (string.IsNullOrEmpty(objectUri)) { continue; } string fullTypeName = base.GetStringAttribute(node, "type"); if (string.IsNullOrEmpty(fullTypeName)) { continue; } string mode = base.GetStringAttribute(node, "mode").ToLower(); string typeName = fullTypeName.Split(',')[0]; string assemblyName = string.Empty; if (fullTypeName.IndexOf(',') != -1) { assemblyName = fullTypeName.Split(',')[1]; } else { Assembly assembly = ReflectUtil.FindAssemblyFromAppDirectory(typeName); if (assembly != null) { assemblyName = assembly.FullName; } } WellKnownObjectMode objectMode = WellKnownObjectMode.Singleton; if (mode == "singlecall") { objectMode = WellKnownObjectMode.SingleCall; } WellKnownServiceTypeEntry wse = new WellKnownServiceTypeEntry(typeName, assemblyName, objectUri, objectMode); si.AddWellKnownObject(wse); } }
//解析并注册WellKnown对象 void ParseWellKnownClientObjectSection(XmlNode root) { foreach (XmlNode node in root.ChildNodes) { if (node.NodeType == XmlNodeType.Comment) { continue; } if (node.Name != "add") { continue; } string objectUri = base.GetStringAttribute(node, "objectUri"); if (string.IsNullOrEmpty(objectUri)) { continue; } string fullTypeName = base.GetStringAttribute(node, "type"); if (string.IsNullOrEmpty(fullTypeName)) { continue; } string typeName = fullTypeName.Split(',')[0]; string assemblyName = string.Empty; if (fullTypeName.IndexOf(',') != -1) { assemblyName = fullTypeName.Split(',')[1]; } else { Assembly assembly = ReflectUtil.FindAssemblyFromAppDirectory(typeName); if (assembly != null) { assemblyName = assembly.FullName; } } WellKnownClientTypeEntry wce = new WellKnownClientTypeEntry(typeName, assemblyName, objectUri); RemotingConfiguration.RegisterWellKnownClientType(wce); } }