in src/CTA.Rules.PortCore/ProjectSpecificPort/WCF/WCFServicePort.cs [149:212]
public static SyntaxNode ReplaceProgramNode(Dictionary<string, int> transportPort, SyntaxTree programTree, bool containsTransportRelatedMode)
{
string httpListen = Constants.ListenLocalHostFormat;
string httpsListen = Constants.ListenHttpsFormat;
string netTcpMethodExpression = Constants.NetTcpFormat;
var root = programTree.GetRoot();
var lambdaExpressionList = root.DescendantNodes().OfType<SimpleLambdaExpressionSyntax>();
if (lambdaExpressionList.IsNullOrEmpty())
{
return root;
}
var lambdaExpression = lambdaExpressionList.First();
var block = lambdaExpression.Block;
var newBlock = block;
var parameter = lambdaExpression.Parameter;
if (transportPort.ContainsKey(Constants.HttpProtocol))
{
httpListen = String.Format(httpListen, parameter.Identifier.ValueText, transportPort.GetValueOrDefault(Constants.HttpProtocol, 8080));
newBlock = block.AddStatements(SyntaxFactory.ParseStatement(httpListen));
}
if (transportPort.ContainsKey(Constants.HttpsProtocol) || containsTransportRelatedMode)
{
httpsListen = String.Format(httpsListen, parameter.Identifier.ValueText, transportPort.GetValueOrDefault(Constants.HttpsProtocol, 8888));
newBlock = newBlock.AddStatements(SyntaxFactory.ParseStatement(httpsListen));
}
var newLambdaExpression = lambdaExpression.ReplaceNode(block, newBlock);
root = root.ReplaceNode(lambdaExpression, newLambdaExpression);
var memberAccessExpressions = root.DescendantNodes().OfType<MemberAccessExpressionSyntax>().ToList();
MemberAccessExpressionSyntax kestrelInvocationNode = null;
foreach (MemberAccessExpressionSyntax memberAccessExpression in memberAccessExpressions)
{
if (memberAccessExpression.Name.Identifier.Text.Equals(Constants.UseStartupMethodIdentifier))
{
kestrelInvocationNode = memberAccessExpression;
break;
}
}
if (transportPort.ContainsKey(Constants.NettcpProtocol))
{
var netTCPExpression = SyntaxFactory
.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
kestrelInvocationNode.Expression,
SyntaxFactory.IdentifierName(netTcpMethodExpression)
);
var netTcpInvocation = SyntaxFactory.InvocationExpression(netTCPExpression, SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList(new[] {
SyntaxFactory.Argument(SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(transportPort.GetValueOrDefault(Constants.NettcpProtocol, 8000))))
})));
var kestrelInvocationWithNetTcp = kestrelInvocationNode.WithExpression(netTcpInvocation);
root = root.ReplaceNode(kestrelInvocationNode, kestrelInvocationWithNetTcp);
}
return root;
}