2017-12-08 8 views
0

角4の単一ページアプリケーション(ローカルではhttp://localhost:4200/で実行)からJSONコンテンツのPOSTをREST WCF Webサービスエンドポイントに発行しようとしています(ローカルで実行されます)。エンドポイントは次のとおりです:http://localhost:3026/ToshlSrvc.svc/Add)。角4のPOSTからWCF RESTサービスへのNULL応答の返信

POSTリクエストを発行するために、標準のHttp.post()メソッド+ RxJs拡張を使用します。 Webサービスは実際に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です):私はクロームのネットワーク活動に確認するか、場合、私は郵便配達してポストを発行する場合、私は、レスポンスボディには、以下のことがわかりここで何が間違っているのか分からない。 いくつかの提案がありますか?

何か助けていただければ幸いです。


CASEここ

は、私がWebサービスを達する方法の活字体のコードです:

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! 
        }); 
    } 

はここでWebサービスのエンドポイントの宣言です:

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

私の身体Webサービスのエンドポイント:

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; 
} 

OPTIONSプリフライトやPOSTリクエストのチェック:私が露出し、ここでhttps://enable-cors.org/server_wcf.html + iの空GETOPTIONSを追加するために必要などのCORSを有効にして、これらの異なるドメイン間の通信を可能にするために https://www.dropbox.com/s/900q3oor6dex0hl/issueOPTIONS.png?dl=0 https://www.dropbox.com/s/no8o78oqsolxk21/issuePOST.png?dl=0


私のwebserviceのエンドポイントは、ここに公開されています: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

私はそれが助けてうれしいです:) –

関連する問題