2017-02-02 3 views
1

2 개의 프로젝트 중 하나는 Asp.Net 웹 서비스이고 다른 하나는 Asp.Net 웹 응용 프로그램입니다. 동일한 솔루션에서 두 프로젝트를 모두 실행하려고하면 완벽하게 실행됩니다. 그러나 프로젝트를 별도로 실행하면 (localhost에서는 포트 번호로 오류가 발생합니다). 이 문제를 해결하기 위해 열심히 노력하고 있지만 완벽한 해결책은 없습니다.asp.net 웹 서비스의 Access-Control-Allow-Origin

WebServiceServer :

[WebMethod] 
public void CheckUserNameAndGetNew(string UserName) 
{ 
    bool IsUserNameAvailable = true; 
    DAL dal = new DAL(); 

    UserNameCheck objBel = new UserNameCheck(); 

    //IsUserNameAvailable = dal.CheckUserNameDAL(UserName); 

    while(!dal.CheckUserNameDAL(UserName)) // get in if UserName already exist in database 
    { 
     Random myRandomNum =new Random(); 
     int myRandomNumber = myRandomNum.Next(1, 100); 

     UserName = UserName + myRandomNumber; 
     IsUserNameAvailable = false; 
    } 

    objBel.IsUserNameAvailable = IsUserNameAvailable; 
    objBel.UserName = UserName; 

    JavaScriptSerializer js = new JavaScriptSerializer(); 
    Context.Response.Write(js.Serialize(objBel)); 
} 

웹 서버 : 클라이언트 측에서

$.ajax({ 
    url: "http://localhost:49839/WebService1.asmx/CheckUserNameAndGetNew", 
    method: "Post", 
    data: { UserName: txtUserName }, 
    dataType: "json", 
    success: function (data) { 
     debugger; 
     var AvailableMsg = $('#AvailableMsg'); 
     var Availablelbl = $('#Availablelbl'); 
     var AvailableUserName = $('#AvailableUserName'); 
     if (data.IsUserNameAvailable) { 
      AvailableMsg.text(txtUserName + ' User Name Available'); 
      Availablelbl.text(''); 
      AvailableUserName.text(''); 
      AvailableMsg.css('color', 'Green'); 
     } 
     else { 
      AvailableMsg.text(txtUserName + ' User Name is not Available'); 
      Availablelbl.text('Available: '); 
      AvailableUserName.text(data.UserName).click(function() { 
       $('#txtUserName').val($(this).text()); 
       AvailableMsg.text(''); 
       Availablelbl.text(''); 
       AvailableUserName.text(''); 
      }); 
      AvailableMsg.css('color', 'red'); 
      Availablelbl.css('color', 'Gray'); 
      AvailableUserName.css('color', 'green'); 
     } 
    }, 
    error: function (err) { 
     debugger; 
    } 
}); 

오류 검사 콘솔 :

XMLHttpRequest의 수 없어 부하 http://localhost:49839/WebService1.asmx/CheckUserNameAndGetNew. 아니요 요청한 리소스에 'Access-Control-Allow-Origin'헤더가 있습니다. 따라서 'http://localhost:65360'의 출처는 허용되지 않습니다. .

+1

는 https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#enable-cors보기 – sideshowbarker

답변

2

또한 웹 서비스 서버가 데이터 상호 도메인 (다른 사람의 요청 요청 - 응답)을 제공하도록 허용해야합니다. 따라서 웹 서비스 서버의 web.config에 설정을 전달해야합니다.

<system.webServer> 
<httpProtocol> 
     <customHeaders> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer>