| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- //------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------
- namespace System.ServiceModel.Administration
- {
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Globalization;
- using System.IO;
- using System.Runtime;
- using System.ServiceModel;
- using System.ServiceModel.Description;
- sealed class ServiceInfo
- {
- KeyedByTypeCollection<IServiceBehavior> behaviors;
- EndpointInfoCollection endpoints;
- ServiceHostBase service;
- string serviceName;
- internal ServiceInfo(ServiceHostBase service)
- {
- this.service = service;
- this.behaviors = service.Description.Behaviors;
- this.serviceName = service.Description.Name;
- this.endpoints = new EndpointInfoCollection(service.Description.Endpoints, this.ServiceName);
- }
- public string ConfigurationName
- {
- get { return this.service.Description.ConfigurationName; }
- }
- public string DistinguishedName
- {
- get { return this.serviceName + "@" + this.FirstAddress; }
- }
- public string FirstAddress
- {
- get
- {
- Fx.Assert(null != this.Service.BaseAddresses, "");
- string address = "";
- if (this.Service.BaseAddresses.Count > 0)
- {
- Fx.Assert(null != this.Service.BaseAddresses[0], "");
- address = this.Service.BaseAddresses[0].ToString();
- }
- else if (this.Endpoints.Count > 0)
- {
- Uri addressUri = this.Endpoints[0].Address;
- if (null != addressUri)
- {
- address = addressUri.ToString();
- }
- }
- return address;
- }
- }
- public string Name
- {
- get { return this.serviceName; }
- }
- public string Namespace
- {
- get { return this.service.Description.Namespace; }
- }
- public string ServiceName
- {
- get { return this.serviceName; }
- }
- public ServiceHostBase Service
- {
- get
- {
- return this.service;
- }
- }
- public KeyedByTypeCollection<IServiceBehavior> Behaviors
- {
- get
- {
- return this.behaviors;
- }
- }
- public CommunicationState State
- {
- get
- {
- return this.Service.State;
- }
- }
- public EndpointInfoCollection Endpoints
- {
- get
- {
- return this.endpoints;
- }
- }
- public string[] Metadata
- {
- get
- {
- string[] result = null;
- ServiceMetadataExtension metadataExtension = service.Extensions.Find<ServiceMetadataExtension>();
- if (null != metadataExtension)
- {
- Collection<string> metadataStrings = new Collection<string>();
- try
- {
- foreach (MetadataSection section in metadataExtension.Metadata.MetadataSections)
- {
- using (StringWriter sw = new StringWriter(CultureInfo.InvariantCulture))
- {
- if (section.Metadata is System.Web.Services.Description.ServiceDescription)
- {
- System.Web.Services.Description.ServiceDescription metadata = (System.Web.Services.Description.ServiceDescription)section.Metadata;
- metadata.Write(sw);
- metadataStrings.Add(sw.ToString());
- }
- else if (section.Metadata is System.Xml.XmlElement)
- {
- System.Xml.XmlElement metadata = (System.Xml.XmlElement)section.Metadata;
- using (System.Xml.XmlWriter xmlWriter = System.Xml.XmlWriter.Create(sw))
- {
- metadata.WriteTo(xmlWriter);
- metadataStrings.Add(sw.ToString());
- }
- }
- else if (section.Metadata is System.Xml.Schema.XmlSchema)
- {
- System.Xml.Schema.XmlSchema metadata = (System.Xml.Schema.XmlSchema)section.Metadata;
- metadata.Write(sw);
- metadataStrings.Add(sw.ToString());
- }
- else
- {
- metadataStrings.Add(section.Metadata.ToString());
- }
- }
- }
- }
- catch (InvalidOperationException e)
- {
- metadataStrings.Add(e.ToString());
- }
- result = new string[metadataStrings.Count];
- metadataStrings.CopyTo(result, 0);
- }
- return result;
- }
- }
- }
- }
|