none
javascript call security wcf which Certificated by username and passwords RRS feed

  • 问题

  • Is it possible to call WCF methods from JavaScript in the same way that you can call web methods? Where it gets more complicated is the WCF service 

    is secure so the JavaScript will have to pass username and password across. How would you do this? Is there any examples of this?


    Specifically, I want information about how to call a secure WCF service from JavaScript. The service uses a UserNamePasswordValidator. The binding wsHttpBinding.

    now i can access it by js ,but the service is no_security.

    By the way, is hosted in IIS compared to host their own which is better.

    2012年7月24日 1:32

全部回复

  • 我建议你使用 Rest 风格的 WCF 服务,使用 ASP.NET Forms 认证。

    js调用wsHttpBinding会比较困难,估计也不行。

    2012年7月24日 5:28
  • 但是我们项目前端就只用html+js 是不是我们就不能有验证机制了哦!

    wcf

    2012年7月26日 9:31
  • 你可以考虑手动在请求头中添加需要的验证信息,参考:

    How can I pass windows authentication to webservice using jQuery?

    http://stackoverflow.com/questions/1002179/how-can-i-pass-windows-authentication-to-webservice-using-jquery

    用UserNamePasswordValidator的话,用户信息也包含在soap的header中,抓包分析一下

    2012年7月30日 2:44
  • 好的,我看看

    谢谢


    wcf

    2012年7月30日 12:42
  • 但是我们项目前端就只用html+js 是不是我们就不能有验证机制了哦!

    wcf


    能有,采用REST和Forms认证,外加HTTPS,最简单。
    2012年7月31日 5:32
  • 可以给点实例吗,谢谢!

    wcf

    2012年8月1日 6:19
  • 你说的这种就是要将操作契约设置成这样吧

     [WebGet(RequestFormat = WebMessageFormat.Xml,
               ResponseFormat = WebMessageFormat.Xml)]
            string GetDataP(int value);

    调用的地方:

     var bhRequest = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                "<s:Body>" +
                "<GetDataP xmlns=\"http://tempuri.org/\">" +
                "<value>10</value>" +
                "</GetDataP>" +
                "</s:Body>" +
            "</s:Envelope>";
            $("#btnWCFBasicHttp").click(function () {
                $.ajax({
                    type: "GET",
                    url: "http://192.168.1.87:8080/hello/GetDataP",
                    data: bhRequest,
                    timeout: 10000,
                    contentType: "text/xml",
                    dataType: "xml",
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader("SOAPAction", "http://192.168.1.87:8080/hello/GetDataP");
                    },
                    success: function (data) {
                        $(data).find("GetDataResponse").each(function () {
                            alert($(this).find("GetDataResult").text());
                        });
                    },
                    error: function (xhr, status, error) {
                        alert(error);

                    }
                });
            });

    是不是这样就是可以发送soap消息过来了。但是我该成这样 调试收到

    405 Method Not Allowed

    如果是json格式就可以访问。请指教


    wcf

    2012年8月2日 3:41