使用angular / javascript使用WCF Web服务

时间:2014-11-30 21:26:20

标签: javascript angularjs web-services wcf

我正在使用WCF实现服务器,并尝试使用使用Angular开发的客户端来访问其余服务。

这是服务:

 public interface IConnexion

{

[OperationContract]
[WebGet(UriTemplate = "Connexion/{login}/{mdp}", ResponseFormat = WebMessageFormat.Json)]
Utilisateur Connexion(string login, string mdp);

[OperationContract]
[WebInvoke(UriTemplate = "Deconnexion/{id_user}", RequestFormat = WebMessageFormat.Json)]
void Deconnexion(string id_user);

}

我的功能试图达到服务:

 app.service('serverConnexionServices', function(userService, serverConfigService) {

        this.Connexion = function(login, pass)
        {
            var uri = this.getServerUri() + "Connexion/"+login+"/"+CryptoJS.MD5(pass);

            var promises = $http.get(uri)
        .success(function(data, status, headers, config) {
            // this callback will be called asynchronously
            // when the response is available
            return data;
        }).
        error(function(data, status, headers, config) {
            // called asynchronously if an error occurs
            // or server returns response with an error status.
            return "";
        });

return promises;
        };
    });

我的表格的控制者:

 app.directive('loginContent', function(userService, serverConnexionServices){
                return{
                    restrict : 'E',
                    templateUrl : "includes/home/login-content.html",
                    controllerAs: "loginController",
                    controller: function($scope, userService, serverConnexionServices) {

                    var IsSubmitEnabled = true;
                    this.errors = "";

                    this.validateLogin = function(user) { // Calling the service
                        this.IsSubmitEnabled = false; // To avoid more than one click while checking on the server
                        var retour = serverConnexionServices.TryConnection(user).then(function(promise) {
                        alert('promise:'+retour);
                        if(promise.length > 0)
                        { // There is an error so we show a message to the user
                            this.promise= retour;
                        }
                            this.IsSubmitEnabled = true;
                            user = {};
    });
                        };

                        }
                    }
            });

但是当我尝试打开我的客户端时,在Visual Studio中引发断点之前会出现警告框(我将断点放在我的“Connexion”函数的第一行。所以这意味着服务器尚未回答请求,但$ http.get()已经发送了它的答案。所以结果对象不包含服务器发送的内容。根据Angular的文档,响应将异步发送。但是如何强制我的请求等待答案?

我的控制器现在从服务器获得答案,但它没有更新视图,如果我尝试手动调用$ scope。$ apply()我收到错误“$ digest已在进行中”。我如何强迫我的观点刷新自己? (我注意到,如果我把this.errors =“aaa”;一旦“then”关闭,我的视图会刷新并且“aaa”,我还检查了errors.length> 0并带有警告信息)

我的观点:

<div ng-show="loginController.errors.length > 0" class="alert alert-danger" role="alert" style="display: inline-block;"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>{{loginController.errors}}</div>

编辑:我现在可以在Visual Studio的Connexion实现中到达我的断点,但服务器的答案仍然不是预期的

EDIT2 :我添加了需要刷新的控制器。

EDIT3 :好的,我更新了我的代码,我需要在控制器的呼叫上加上“then”功能,我的控制器现在可以得到答案。但是我的观点不会在错误上更新。它应该将div可见性设置为true,但异步调用似乎阻止它。我试过使用apply()和digest()但没有成功。你能帮帮我吗?

0 个答案:

没有答案