'asp.net'에 해당되는 글 18건

  1. 2012.10.16 C# 실행시간에 웹서비스 참조 추가하기
  2. 2012.07.06 ASP.NET QueryString 인코딩 설정
  3. 2011.11.23 ASP.NET에서 Log4Net 사용하기
  4. 2011.06.20 ASP.NET Texbox에 포커스 이동시 팝업창 띄우기
  5. 2011.06.16 ASP.NET Code Behind에서 Post로 값 넘기기
  6. 2011.05.16 ASP.NET TextBox의 텍스트 전체 선택
  7. 2011.05.04 ASP.NET 코드 비하인드에서 경고창 띄우기
2012.10.16 11:11

C# 실행시간에 웹서비스 참조 추가하기

웹서비스 참조 생성에 필요한 클래스
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Security.Permissions;
using System.Web.Services.Description;

namespace WebServiceCall
{
    internal class WsProxy
    {
        [SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]

        internal static object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)
        {
            System.Net.WebClient client = new System.Net.WebClient();

            // Connect To the web service
            System.IO.Stream stream = client.OpenRead(webServiceAsmxUrl + "?wsdl");

            // Now read the WSDL file describing a service.
            ServiceDescription description = ServiceDescription.Read(stream);

            ///// LOAD THE DOM /////////
            // Initialize a service description importer.
            ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
            importer.ProtocolName = "Soap12"; // Use SOAP 1.2.
            importer.AddServiceDescription(description, null, null);

            // Generate a proxy client.
            importer.Style = ServiceDescriptionImportStyle.Client;

            // Generate properties to represent primitive values.
            importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;

            // Initialize a Code-DOM tree into which we will import the service.
            CodeNamespace nmspace = new CodeNamespace();
            CodeCompileUnit unit1 = new CodeCompileUnit();
            unit1.Namespaces.Add(nmspace);

            // Import the service into the Code-DOM tree. This creates proxy code that uses the service.
            ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);

            if (warning == 0) // If zero then we are good to go
            {

                // Generate the proxy code
                CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp");

                // Compile the assembly proxy with the appropriate references
                string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };

                CompilerParameters parms = new CompilerParameters(assemblyReferences);

                CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);

                // Check For Errors
                if (results.Errors.Count > 0)
                {
                    foreach (CompilerError oops in results.Errors)
                    {
                        System.Diagnostics.Debug.WriteLine("========Compiler error============");
                        System.Diagnostics.Debug.WriteLine(oops.ErrorText);
                    }

                    throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window.");
                }

                // Finally, Invoke the web service method
                object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);

                MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);

                return mi.Invoke(wsvcClass, args);

            }
            else
            {
                return null;
            }
        }
    }
}


웹 서비스 호출

object a = WsProxy.CallWebService("웹서비스 asmx url", "서비스명", "메소드명", new object[]{파라미터들});

[출처] Adding a Web reference dynamically at Runtime


Trackback 0 Comment 0
2012.07.06 13:10

ASP.NET QueryString 인코딩 설정

프로젝트내 전체 페이지 설정

web.config 파일내 다음 문구 삽입

<configuration>
  <system.web>
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
  </system.web>
</configuration>


페이지별 설정

페이지에 아래문구 삽입

<%@ Page RequestEncoding="utf-8" ResponseEncoding="utf-8" %>


한글 인코딩시 utf-8이 아니라 euc-kr로 설정해야 함


[출처] How to: Select an Encoding for ASP.NET Web Page Globalization

Trackback 0 Comment 0
2011.11.23 16:39

ASP.NET에서 Log4Net 사용하기

log4net은 응용프로그램에서와 같이 ASP.NET 웹서비스에서도 로그를 남기기 위해 사용될 수 있다.log4net은 응용프로그램에서와 같이 ASP.NET 웹서비스에서도 다음의 2가지 작업만 하면 로그를 남길 수 있다.

1. Global.asax에서 로깅 환경 설정을 초기화 하는 코드 추가
2. Web.config에서 log4net 관련 설정 추가

ASP.NET 웹서비스에서는 반드시 Global.asax파일을 정의해야 하는데, 직접 asax에 또는 코드비하인드 파일에 초기화 코드가 추가되어져야 한다.

다음의 코드가 가장 일반적으로 로그 초기화에 사용되는 Global.asax파일 내용이다.

<%@ Application Language="C#" %>
<script runat="server">
private void Application_Start(Object sender, EventArgs e)
{
     log4net.Config.DOMConfigurator.Configure();
}
</script>

만약 Global.asax의 코드비하인드 파일을 사용할 거라면 Global.asax는 간단하게 다음과 같이 정의 하면되고
<%@ Application Codebehind="Global.asax.cs" Inherits="MyApp.Global" %>

다음과 같은 코드를 Global.asax.cs파일에 추가하면 된다.

namespace MyApp
{
  public class Global : System.Web.HttpApplication
  {
    /// 
    /// Called when the web application starts
    /// 
    /// who
    /// what
    protected void Application_Start(Object sender, EventArgs e)
    {
      // 응용프로그램이 로딩 될 때 로그를 초기화 함.
      log4net.Config.DOMConfigurator.Configure();
    }

  }
}



웹서비스가 로드(또는 리로드 - load or reload) 될 때 Application_Start 메쏘드가 자동으로 호출된다. 보는 바와 같이 이때 log4net환경의 초기화를 이때 수행한다.

각각의 웹서비스들이 자체 폴더(버추얼 디렉토리)를 가지고 있고 각 폴더에는 웹서비스의 설정을 위해 Web.config 파일들을 하나씩 가지고 있게 되는데 이 파일에 log4net을 위한 설정을 추가하게 된다.

log4net의 설정값을 가지고 있는 Web.config 파일의 예는 다음과 같다.



  
    


[출처] ASP.NET 에서 Log4Net 사용하기
Trackback 0 Comment 0
2011.06.20 19:31

ASP.NET Texbox에 포커스 이동시 팝업창 띄우기

1. 팝업창을 띄우기 위한 javascript를 aspx파일에 작성

axpx 파일
function CheckId() {
    window.showModalDialog("CheckID.aspx", window, "dialogWidth:410px; dialogHeight:258px;status:no; scroll:no;help:no;unaborned:no");
}


 2. Code Behind에서 Textbox에 javascript 연결

axpx.cs (code behind)
protected void Page_Load(object sender, EventArgs e)
{
    txtUserId.Attributes.Add("onFocus", "CheckIdl()");
}


[참조] Change Textbox/Input background color on focus
Trackback 0 Comment 0
2011.06.16 16:38

ASP.NET Code Behind에서 Post로 값 넘기기

일반적으로 aspx에서 form 태그를 써서 값을 넘겨도 되지만 부득이하게 코드비하인드에서 POST로 값을 넘겨야 할 경우가 발생한다.

아래의 코드를 이용하면 한방에 해결

private void submitForm(string url, string mallId, string mallNo, string orderNo)
{
    System.Web.HttpContext.Current.Response.Write("<form name='newForm' method=post action='" + url + "'>");
    System.Web.HttpContext.Current.Response.Write(string.Format("<input type=hidden name=\"mallId\" value=\"{0}\">", mallId));
    System.Web.HttpContext.Current.Response.Write(string.Format("<input type=hidden name=\"mallNo\" value=\"{0}\">", mallNo));
    System.Web.HttpContext.Current.Response.Write(string.Format("<input type=hidden name=\"orderNo\" value=\"{0}\">", orderNo));
    System.Web.HttpContext.Current.Response.Write("</form>");
    System.Web.HttpContext.Current.Response.Write("</body>");
    Response.Write("<SCRIPT LANGUAGE='JavaScript'>document.forms[0].submit();</SCRIPT>");
}


[출처] POST through code behind in asp.net

Trackback 0 Comment 0
2011.05.16 16:06

ASP.NET TextBox의 텍스트 전체 선택

ASP.NET 프로그래밍을 하다보면 텍스트박스의 텍스트를 전체 선택해야 할때가 있다.
예를 들어 로그인 창에서 로그인 검사 후 비밀번호가 잘못 되었을 경우 비밀번호가 일치하기 않습니다라는 메시지와 함께 비밀번호 텍스트박스의 텍스트를 전체 선택과 같은...

ASP.NET에서는 자체 메소드를 제공하지 않고 자바스크립트를 이용해서 구현이 가능한다.
ASP.NET의 코드 비하인드의 Page_Load 메소드에 다음 코드를 이용하면 된다.

protected void Page_Load(object sender, EventArgs e)
{
	TextBox1.Attributes["onfocus"] = "javascript:this.select();";
}

이를 응용해서 만약 마우스 오버가 일어났을 경우 텍스트 박스에 포커스를 주고 싶을 경우 다음 코드를 이용할 수 있다.

protected void Page_Load(object sender, EventArgs e)
{
	TextBox1.Attributes["onmouseover"] = "javascript:this.focus();"; 
}


[출처] Select All Text in ASP.NET Text Box

Trackback 0 Comment 0
2011.05.04 15:21

ASP.NET 코드 비하인드에서 경고창 띄우기

ASP.NET 코딩을 하다보면 코드 비하인드에서 경고창을 띄워야 하는 경우가 발생

1. UpdatePanel을 사용할 경우

public void CreateMessageAlertInUpdatePanel(UpdatePanel updatePanel, string message)
{
    string script = "alert('" + message + "');";
    Guid guidKey = Guid.NewGuid();
    ScriptManager.RegisterStartupScript(updatePanel, updatePanel.GetType(), guidKey.ToString(), script, true);
}

CreateMessageAlertInUpdatePanel(this.UpdatePanel1, "message") 로 호출

2. UpdatePanel을 사용하지 않을 경우
public void CreateMessageAlert(string message)
{
    string script = "alert('" + message + "');";
    Guid guidKey = Guid.NewGuid();
    Page.ClientScript.RegisterStartupScript(typeof(Page), guidKey.ToString(), script, true);
}

CreateMessageAlert("message")로 호출

[참조] Creating javascript alerts in ASP.NET with UpdatePanel (or without)
Trackback 0 Comment 0