从angular 2调用asmx webservice

时间:2016-07-27 08:02:29

标签: web-services angular asmx

我正在尝试我的第一个Angular 2应用。目前,我正面临着Web服务调用的问题。我使用www.myserver.domain/folder/api/webservice.asmx/method等网址获得了网络服务。

当我尝试使用Firefox调用它时,会显示该方法,如果我在localhost上运行它,我可以正确测试它。但是,如果我尝试从角度代码调用它,它将失败。谁能告诉我,我做错了什么?

我的代码:

@Injectable()
export class MyService {
    // URL to web api
    private serviceUrl = 'http://www.myserver.domain/folder/api/webservice.asmx/method';

    constructor(private http: Http) { }

    getData() {
        let body = JSON.stringify({ Param1: "0", Param2: "0", Param3: "0" });
        let headers = new Headers({ 'Content-Type': 'application/json' });
        let options = new RequestOptions({ headers: headers });
        return this.http.post(this.serviceUrl, body, options)
            .toPromise()
            .then(response => response.json().data as MyDataClass[])
            .catch(this.handleError);
    }

    handleError(error: any) {
        console.error('An error occurred', error);
        return Promise.reject(error.message || error);
    }
}

对于推荐,这是我的网络服务的样子:

[WebService(Namespace = "mynamespace")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class webservice: System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public void List(int Param1 = 0, int Param2 = 0, int Param3 = 0)
    {
        //... some code to populate result of type List<Dictionary<string, string>>
        data.Message = Common.TranslateToSerialize(result);
        Context.Response.Write(js.Serialize(data.Message));
        return;
    }

感谢您提供的任何帮助。请考虑我是JS / Ang2的新手,所以在询问时,请尽可能详细:)

1 个答案:

答案 0 :(得分:1)

只是为了让每个人都知道导致问题的原因:服务返回JSON响应,后跟{“d”:null}字符串。当我删除它时,一切都被正确解析。

我会暂时搁置这个问题。我想知道是否有人知道为什么要追加这个字符串。如果您能向我解释,我会将您的答案标记为正确答案。我不知道这个字符串的来源是什么,因为Web服务在没有它的情况下返回JSON。

感谢所有想要回答/解释的人。