in src/dotnet-svcutil/lib/src/CodeDomFixup/MethodCreationHelper.cs [539:741]
private static void AddWSFederationBindingConfiguration(CodeStatementCollection statements, WSFederationHttpBinding wsFedHttp, bool isIssuerBinding = false)
{
string ResultVarName = "result";
string ResultRef = "result";
string WSTrustTokenVarName = "wsTrustTokenParams";
string IssuerBindingName = "issuerBinding";
string IssuerAddressName = "issuerAddress";
if (wsFedHttp.Security.Message.IssuerBinding is WSFederationHttpBinding)
{
ResultVarName = "federationIssuerBinding";
WSTrustTokenVarName = "federationWsTrustTokenParams";
IssuerBindingName = "federationIssuerBinding";
IssuerAddressName = "federationissuerAddress";
}
WSFederationHttpBinding defaultBinding = new WSFederationHttpBinding();
CodeVariableReferenceExpression wsTrustTokenVar = new CodeVariableReferenceExpression(WSTrustTokenVarName);
CodeVariableReferenceExpression issuerBindingVar = new CodeVariableReferenceExpression(IssuerBindingName);
CodeVariableReferenceExpression issuerBindingVar2 = new CodeVariableReferenceExpression(ResultRef);
CodeVariableReferenceExpression issuerAddressVar = new CodeVariableReferenceExpression(IssuerAddressName);
if (wsFedHttp.Security.Message.IssuerBinding != null)
{
if (wsFedHttp.Security.Message.IssuerBinding is WS2007FederationHttpBinding ws2007FedHttpIssuer)
{
AddWS2007FederationBindingConfiguration(statements, ws2007FedHttpIssuer, true);
}
else if (wsFedHttp.Security.Message.IssuerBinding is WSFederationHttpBinding wsFedHttpIssuer)
{
AddWSFederationBindingConfiguration(statements, wsFedHttpIssuer, true);
}
else
{
AddIssuerBindingConfiguration(statements, wsFedHttp.Security.Message.IssuerBinding);
}
}
else
{
statements.Add(
new CodeVariableDeclarationStatement(
typeof(WSHttpBinding),
IssuerBindingName,
new CodeObjectCreateExpression(typeof(WSHttpBinding),
new CodePropertyReferenceExpression(new CodeTypeReferenceExpression(typeof(SecurityMode)), "Transport"))));
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(issuerBindingVar, "Security"),
"Transport"), "ClientCredentialType"),
new CodePropertyReferenceExpression(new CodeTypeReferenceExpression(typeof(System.ServiceModel.HttpClientCredentialType)), "Basic")));
}
statements.Add(
new CodeVariableDeclarationStatement(
typeof(EndpointAddress),
IssuerAddressName,
new CodeObjectCreateExpression(typeof(EndpointAddress),
new CodeObjectCreateExpression(typeof(Uri),
new CodePrimitiveExpression(wsFedHttp.Security.Message.IssuerAddress.ToString())))));
//if the WSFederationHttpBinding instance's issuer binding is still WSFederationHttpBinding,
//then init the parent WSFederationHttpBinding's WSTrustTokenParameters with the already generated WSFederationHttpBinding result var
if (!isIssuerBinding && wsFedHttp.Security.Message.IssuerBinding is WSFederationHttpBinding)
{
statements.Add(
new CodeVariableDeclarationStatement(
typeof(System.ServiceModel.Federation.WSTrustTokenParameters),
WSTrustTokenVarName,
new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(System.ServiceModel.Federation.WSTrustTokenParameters)), "CreateWSFederationTokenParameters",
issuerBindingVar2, issuerAddressVar)));
}
else
{
statements.Add(
new CodeVariableDeclarationStatement(
typeof(System.ServiceModel.Federation.WSTrustTokenParameters),
WSTrustTokenVarName,
new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(System.ServiceModel.Federation.WSTrustTokenParameters)), "CreateWSFederationTokenParameters",
issuerBindingVar, issuerAddressVar)));
}
statements.Add(
new CodeVariableDeclarationStatement(
typeof(System.ServiceModel.Federation.WSFederationHttpBinding),
ResultVarName,
new CodeObjectCreateExpression(typeof(System.ServiceModel.Federation.WSFederationHttpBinding), wsTrustTokenVar)));
CodeVariableReferenceExpression resultVar = new CodeVariableReferenceExpression(ResultVarName);
// Set AllowCookies's default value to true.
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
resultVar,
"AllowCookies"),
new CodePrimitiveExpression(true)));
if (defaultBinding.MessageEncoding != wsFedHttp.MessageEncoding)
{
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
resultVar,
"MessageEncoding"),
new CodePropertyReferenceExpression(
new CodeTypeReferenceExpression(typeof(WSMessageEncoding)),
wsFedHttp.MessageEncoding.ToString())));
}
if (defaultBinding.TransactionFlow != wsFedHttp.TransactionFlow)
{
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
resultVar,
"TransactionFlow"),
new CodePrimitiveExpression(wsFedHttp.TransactionFlow)));
}
if (defaultBinding.ReliableSession.Enabled != wsFedHttp.ReliableSession.Enabled)
{
if (wsFedHttp.ReliableSession.Enabled)
{
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(resultVar, "ReliableSession"),
"Enabled"),
new CodePrimitiveExpression(wsFedHttp.ReliableSession.Enabled)));
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(resultVar, "ReliableSession"),
"Ordered"),
new CodePrimitiveExpression(wsFedHttp.ReliableSession.Ordered)));
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(resultVar, "ReliableSession"),
"InactivityTimeout"),
new CodePrimitiveExpression(wsFedHttp.ReliableSession.InactivityTimeout)));
}
}
if (defaultBinding.Security.Mode != wsFedHttp.Security.Mode)
{
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(resultVar, "Security"),
"Mode"),
new CodeFieldReferenceExpression(
new CodeTypeReferenceExpression(typeof(SecurityMode)),
wsFedHttp.Security.Mode.ToString())));
}
if (defaultBinding.Security.Message.EstablishSecurityContext != wsFedHttp.Security.Message.EstablishSecurityContext)
{
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(resultVar, "Security"),
"Message"),
"EstablishSecurityContext"),
new CodePrimitiveExpression(wsFedHttp.Security.Message.EstablishSecurityContext)));
}
if (defaultBinding.Security.Message.NegotiateServiceCredential != wsFedHttp.Security.Message.NegotiateServiceCredential)
{
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(resultVar, "Security"),
"Message"),
"NegotiateServiceCredential"),
new CodePrimitiveExpression(wsFedHttp.Security.Message.EstablishSecurityContext)));
}
if (defaultBinding.Security.Message.AlgorithmSuite != wsFedHttp.Security.Message.AlgorithmSuite)
{
statements.Add(
new CodeAssignStatement(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(
new CodePropertyReferenceExpression(resultVar, "Security"),
"Message"),
"AlgorithmSuite"),
new CodeFieldReferenceExpression(
new CodeTypeReferenceExpression(typeof(System.ServiceModel.Security.SecurityAlgorithmSuite)),
wsFedHttp.Security.Message.AlgorithmSuite.ToString())));
}
if (!isIssuerBinding)
{
statements.Add(new CodeMethodReturnStatement(resultVar));
}
}