1: public class WorkflowRepositoryServiceHost:
2: System.ServiceModel.Activities.WorkflowServiceHost
3: { 4: private Guid serviceID;
5: private static XAMLService currentDBService;
6:
7: public WorkflowRepositoryServiceHost(Guid serviceid):
8: this(LoadServiceDefinition(serviceid),
BuildServiceEndpoints(serviceid))
9: { 10:
11: }
12:
13: public WorkflowRepositoryServiceHost(Service serviceDefinition,
params Uri[] baseAddresses) :
14: base(serviceDefinition, baseAddresses)
15: { 16: ServiceMetadataBehavior mtdBehavior = new ServiceMetadataBehavior();
17: mtdBehavior.HttpGetEnabled = true;
18: this.Description.Behaviors.Add(mtdBehavior);
19: }
20:
21:
22: protected override void OnOpening()
23: { 24: base.OnOpening();
25: }
26:
27: private static Service LoadServiceDefinition(Guid serviceid)
28: { 29: XAMLDBEntities entities= new XAMLDBEntities();
30: IEnumerable<XAMLService> query= from s in entities.XAMLServices
where s.id == serviceid select s;
31: if (query.Count<XAMLService>() > 0)
32: { 33: List<string> endpoints = new List<string>();
34: MemoryStream stream = new MemoryStream();
35: currentDBService= query.First<XAMLService>();
36: XElement.Parse(currentDBService.Service, LoadOptions.None).
Save(stream);
37: stream.Seek(0, SeekOrigin.Begin);
38:
39: Service service = (Service)XamlServices.Load(stream);
40:
41: return service;
42: }
43: else
44: return null;
45:
46: }
47:
48: private static Uri[] BuildServiceEndpoints(Guid serviceid)
49: { 50: if (null == currentDBService)
51: LoadServiceDefinition(serviceid);
52:
53: List<Uri> uris = new List<Uri>();
54: currentDBService.HostConfigs.Load();
55: var endpointQuery = from e in currentDBService.HostConfigs select e;
56: foreach (HostConfig c in endpointQuery)
57: uris.Add(new Uri(String.Format(http://localhost:{0}/{1},
c.Port, c.Path)));
58: return uris.ToArray<Uri>();
59: }
60: }