Esempio n. 1
0
 private ServiceModel.EndpointType[] GenerateEndpoints()
 {
     return(this.Endpoints
            .Select(ep =>
                    new ServiceModel.EndpointType
     {
         Name = ep.Item1,
         Type = ServiceModel.EndpointTypeType.Input,
         Protocol = ServiceDeployer.GetServiceModelProtocol(ep.Item2),
         CertificateRef = string.Empty
     }
                    )
            .ToArray());
 }
Esempio n. 2
0
        /// <summary>
        /// Adds all the required elements to the manifest
        /// <param name="deploymentFolder">Must be the folder where the service manifest will be placed</param>
        /// </summary>
        public void Generate(ServiceModel.ServiceManifestType manifest, string deploymentFolder)
        {
            Debug.Assert(!string.IsNullOrEmpty(this.ServiceTypeName));
            Debug.Assert(this.ServiceTypeImplementation != null);
            Debug.Assert(this.CodePackageFiles.Count != 0);
            Debug.Assert(this.CodePackageName != null);

            bool implementsRequiredInterface =
                typeof(IStatelessServiceFactory).IsAssignableFrom(this.ServiceTypeImplementation) ||
                typeof(IStatelessServiceInstance).IsAssignableFrom(this.ServiceTypeImplementation) ||
                typeof(IStatefulServiceFactory).IsAssignableFrom(this.ServiceTypeImplementation) ||
                typeof(IStatefulServiceReplica).IsAssignableFrom(this.ServiceTypeImplementation);

            Debug.Assert(implementsRequiredInterface);

            if (this.ConfigurationSettings.Count != 0 && this.ConfigPackageName == null)
            {
                throw new ArgumentException("Configuration settings provided without a config package name");
            }

            if ((this.ConfigPackageFiles.Count != 0 && this.ConfigPackageName == null) || (this.DataPackageFiles.Count != 0 && this.DataPackageName == null))
            {
                throw new ArgumentException("Config/Data package had files but no package name");
            }

            ServiceModel.ServiceTypeType serviceTypeDescription = null;
            if (this.IsStateless)
            {
                serviceTypeDescription = new ServiceModel.StatelessServiceTypeType
                {
                    ServiceTypeName      = this.ServiceTypeName,
                    LoadMetrics          = GenerateStatelessLoadMetrics(),
                    PlacementConstraints = this.PlacementConstraints
                };
            }
            else
            {
                serviceTypeDescription = new ServiceModel.StatefulServiceTypeType
                {
                    ServiceTypeName      = this.ServiceTypeName,
                    HasPersistedState    = this.HasPersistedState,
                    LoadMetrics          = GenerateStatefulLoadMetrics(),
                    PlacementConstraints = this.PlacementConstraints
                };
            }

            XmlDocument dummyDocument = new XmlDocument()
            {
                XmlResolver = null
            };
            var extensionValue = dummyDocument.CreateElement("DefaultEntryPoint", "http://schemas.microsoft.com/2011/01/fabric/servicetypeextension");

            extensionValue.InnerText = DefaultEntryPoint.CreateExtensionValueFromTypeInformation(this.CodePackageName, this.ServiceTypeImplementation);

            serviceTypeDescription.Extensions = new ServiceModel.ExtensionsTypeExtension[]
            {
                new ServiceModel.ExtensionsTypeExtension
                {
                    Name = DefaultEntryPoint.ServiceImplementationTypeExtensionName,
                    Any  = extensionValue
                }
            };

            manifest.ServiceTypes = ServiceDeployer.CreateOrAppend <object>(manifest.ServiceTypes, (object)serviceTypeDescription);

            if (this.ServiceGroupTypeName != null)
            {
                ServiceModel.ServiceGroupTypeType serviceGroupTypeDescription = null;
                if (this.IsStateless)
                {
                    serviceGroupTypeDescription = new ServiceModel.StatelessServiceGroupTypeType
                    {
                        ServiceGroupTypeName = this.ServiceGroupTypeName,
                        ServiceGroupMembers  = new ServiceGroupTypeMember[2] {
                            new ServiceGroupTypeMember {
                                ServiceTypeName = this.ServiceTypeName
                            },
                            new ServiceGroupTypeMember {
                                ServiceTypeName = this.ServiceTypeName
                            }
                        }
                    };
                }
                else
                {
                    serviceGroupTypeDescription = new ServiceModel.StatefulServiceGroupTypeType
                    {
                        ServiceGroupTypeName = this.ServiceGroupTypeName,
                        ServiceGroupMembers  = new ServiceGroupTypeMember[2] {
                            new ServiceGroupTypeMember {
                                ServiceTypeName = this.ServiceTypeName
                            },
                            new ServiceGroupTypeMember {
                                ServiceTypeName = this.ServiceTypeName
                            }
                        }
                    };
                }

                manifest.ServiceTypes = ServiceDeployer.CreateOrAppend <object>(manifest.ServiceTypes, (object)serviceGroupTypeDescription);
            }

            // deploy the packages

            // code package
            // add "system.fabric.test.dll" as a required file
            // add "system.fabric.test.host.dll" as a required file
            this.CodePackageFiles.Add(typeof(ApplicationDeployer).Assembly.Location);

            this.CodePackageFiles.Add(GetFileInAssemblyLocation("System.Fabric.Test.Host.exe"));
            this.DeployPackage(deploymentFolder, this.CodePackageName, this.CodePackageFiles);
            manifest.CodePackage = ServiceDeployer.CreateOrAppend(manifest.CodePackage, this.GenerateCodePackageDescription());

            // config package
            if (this.ConfigPackageName != null)
            {
                this.DeployPackage(deploymentFolder, this.ConfigPackageName, this.ConfigPackageFiles);
                manifest.ConfigPackage = ServiceDeployer.CreateOrAppend(manifest.ConfigPackage, this.GenerateConfigPackageDescription());

                this.WriteConfigurationPackage(deploymentFolder);
            }

            // data package
            if (this.DataPackageName != null)
            {
                this.DeployPackage(deploymentFolder, this.DataPackageName, this.DataPackageFiles);
                manifest.DataPackage = ServiceDeployer.CreateOrAppend(manifest.DataPackage, this.GenerateDataPackageDescription());
            }

            manifest.Resources           = manifest.Resources ?? new ServiceModel.ResourcesType();
            manifest.Resources.Endpoints = ServiceDeployer.CreateOrAppend(manifest.Resources.Endpoints, this.GenerateEndpoints());
        }