2017-12-08 3 views
0

Angular 4 단일 페이지 응용 프로그램 (로컬에서는 http://localhost:4200/에서 실행 됨)에서 JSON 콘텐츠의 POST를 REST WCF 웹 서비스 끝점 (로컬로 실행되고 엔드 포인트는 다음과 같습니다. http://localhost:3026/ToshlSrvc.svc/Add).Angular 4 POST to WCF REST 서비스가 NULL 응답을 반환합니다.

표준 Http.post() 메서드 + RxJs 확장을 사용하여 POST 요청을 보냅니다. webservice 실제로 POST 및 상대 콘텐츠를 수신하고 올바르게 설계된 것을 수행합니다 (역 직렬화 된 개체를 Entity Framework 컨텍스트에 추가하고 DB에 저장하고 새 ID를 반환 함). 따라서 모든 클라이언트 측이나 서버 측에서 오류가 발생하지 않습니다.

http.post()를 수신 대기하는 subscribe() 메소드의 "data"인수는 항상 NULL입니다! POST 응답에 포함 된 새 ID를 가져올 수 없습니다!

<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1250</int> 

I (이 경우 1250 올바른 새 ID입니다) : 내가 크롬의 네트워크 활동을 확인하거나 경우에 내가 우체부로 게시물을 발행하지만 내가 응답 본문은 다음과 같은 것을 볼 수 여기서 무엇이 잘못되었는지를 알 수 없습니다. 몇 가지 제안 사항이 있으십니까?

도움을 주시면 감사하겠습니다. 여기

public Add(resource: Entry): void{ 
    const WEBSERVICE_ADDRESS: string = "http://localhost:3026/ToshlSrvc.svc"; 
    const headers = new HttpHeaders().set('Content-Type', 'application/json; charset=utf-8'); 
    return this.http.post(this.WEBSERVICE_ADDRESS + '/Add', JSON.stringify(resource), { headers: headers}) 
        .catch(this.handleError); 
        .subscribe(data => { 
          console.log(data); //I always get null! 
        }); 
    } 

는 웹 서비스의 엔드 포인트의 선언입니다 :


경우 여기

내가 웹 서비스에 도달하는 방법의 타이프 스크립트 코드의의

[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, UriTemplate = "/Add")] 
int Add(EntryDTO entry); 

몸을 내 웹 서비스의 끝점 :

int IToshlSrvc.Add(EntryDTO entry) 
{ 

    Entry newEntry = null; 

    //Create new entry and add to collection 
    if (entry.Type == eTypeDTO.Expense) { 
     newEntry = new ExpenseEntry(); 
     newEntry.Id = this._provider.Expenses.Max(x => x.Id) + 1; 
     this._provider.Expenses.Add((ExpenseEntry)newEntry); 
    } 
    else { 
     newEntry = new IncomeEntry(); 
     newEntry.Id = this._provider.Incomes.Max(x => x.Id) + 1; 
     this._provider.Incomes.Add((IncomeEntry)newEntry); 
    } 

    //Set values 
    newEntry.Categories = entry.Categories; 
    newEntry.Date = Convert.ToDateTime(entry.Date); 
    newEntry.Description = entry.Description; 
    newEntry.Value = entry.Value; 

    //Returns 
    return newEntry.Id; 
} 

옵션 프리 플라이트 및 POST 요청 검사 :이 서로 다른 도메인 간의 통신을 허용하기 위해 https://www.dropbox.com/s/900q3oor6dex0hl/issueOPTIONS.png?dl=0 https://www.dropbox.com/s/no8o78oqsolxk21/issuePOST.png?dl=0


내가 여기 노출 https://enable-cors.org/server_wcf.html 같은 CORS를 사용하도록 설정 + 나는 빈 GetOptions을 추가 할 필요() 엔드 포인트는 여기에 노출 된 웹 서비스에서 Ajax POST to WCF Rest CORS-compliant WebService throws error 405입니다.

위와 같은 GetOptions() 메서드가 없으면 Enable-Cors.org 전략이 전혀 작동하지 않기 때문에이 작업을 수행해야했습니다. 이 시점에서 또는 잘못된 CORS 설정이이 문제에 동의 할 수 있다고 생각합니다.

답변

1

서비스에서 XML을 반환합니다. JSON에 응답 유형을 설정하십시오.

+0

나는 확실히 잠을 자야한다 .... "추가"웹 서버 엔드 포인트에 "ResponseFormat = WebMessageFormat.Json"을 추가하는 것으로 충분했다. 내 눈을 열어 주셔서 대단히 감사합니다! – GiveEmTheBoot

+0

도움이 된 것을 기쁘게 생각합니다. :) –

관련 문제