Bilgi paylaştıkça değerlenir...!

ASP.NET response.redirect problemi.

Geçtiğimiz günlerde yetki kontrolü yaptığım bir sayfada response.redirect yaparken “Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack” şeklindeki hatayı almaktaydım. Biraz incelediğimde client side ‘da callback yaptığım sayfadan server side da redirect yapmaya çalıştığımdan dolayı thread abort olup hataya düşüyordu. bunun çözümü için redirect ettiğimiz method a endresponse parametresini false göndermemiz gerekiyor.

Hata alan kod:
System.Web.HttpContext.Response.Redirect(“accessdenied.aspx”);

Hata almayan kod:
System.Web.HttpContext.Response.Redirect(“accessdenied.aspx”,false);

Xslt compile problemi

For security reasons DTD is prohibited in this XML document. To enable DTD processing set the DtdProcessing property on XmlReaderSettings to Parse and pass the settings into XmlReader.Create method.

Eğer XslCompiledTransform nesnesinin transform methodunu cağırırken yukarıdaki  gibi bir hata ile karşılaşırsanız. Sebebi ve çözümü aşağıdaki gibidir.

 

Yukarıdaki hatanın sebebi xslt nizin içinde  <!DOCTYPE xsl:stylesheet []> şeklinde bir style eklemişsiniz ve transformasyonda bunu parse etme ayarini set etmemişsiniz demektir. Bu yüzden yukarıdaki hatayı alıyorsunuz. Çözümü için aşağıdaki kod parçasını kodunuza eklemeniz yeterli olacaktır.

XmlReaderSettings settings = new XmlReaderSettings();

settings.DtdProcessing = DtdProcessing.Parse;

 

Örnek:

XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;

XslCompiledTransform transform = new XslCompiledTransform();
StringReader xsltStringReader = new StringReader(inputXsltString);
XmlReader xsltXmlReader = XmlReader.Create(xsltStringReader, settings);
transform.Load(xsltXmlReader);
StringReader inputXmlStringReader = new StringReader(inputXmlString);
XmlReader inputXmlReader = XmlReader.Create(inputXmlStringReader);
StringWriter results = new StringWriter();
transform.Transform(inputXmlReader, null, results);

Using SSO in C# class

If you want to use SSO in your custome C# class, you must do this step:

 

1- Add reference “Microsoft.EnterpriseSingleSignOn.Interop.dll”. You can find this dll in “C:\Program Files\Common Files\Enterprise Single Sign-On\Microsoft.EnterpriseSingleSignOn.Interop.dll” or you can use “C:\Program Files\Common Files\Enterprise Single Sign-On\Microsoft.BizTalk.Interop.SSOClient.dll”

2- Use this code block;

public static string GetCredentials(string appName, string propName)
        {
            try
            {
                string value = String.Empty;
                string _username;
                string[] _password;
                ISSOLookup1 ESSOTest = new ISSOLookup1();
                _password = ESSOTest.GetCredentials(appName, SSOFlag.SSO_FLAG_NONE, out _username);
                if (propName == “Password”)
                    value = _password[0];
                else if (propName == “Username”)
                    value = _username;
                return value;
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.WriteLine(e.Message);
                throw;
            }
        }

3- You can call

GetCredentials(“Your sso Application Name”, “Username”);  for get username;

GetCredentials(“Your sso Application Name”, “Password”);  for get password;