none
ajax wcf 指定某个域名 进行跨域访问 RRS feed

  • 问题

  • ajax wcf  发布成功后,可以任意域名访问。现在,怎么指定某个域名才能访问?添加跨域文件 clientaccesspolicy.xml ,怎么不起作用?

    配置参考如下:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <access-policy>
      <cross-domain-access>
        <policy>
          <allow-from http-request-headers="www">
            <domain uri="baidu.com"/>
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>
     
    </configuration>

    2017年8月3日 22:28

全部回复

  • Hi fss,

    你是怎么实现ajax wcf发布后可以被任意域名访问的?

    根据我的理解和测试,创建一个新的wcf ajax enabled service是不支持跨域访问的。需要自己加功能来实现跨域访问,一般是通过添加Global.asax和下面的代码,在下面的代码里可以通过“Access-Control-Allow-Origin”配置特定域名。

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin" , "*");
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
            HttpContext.Current.Response.End();
        }
    }

    我不确定你是怎么实现跨域访问的。

    Best Regards,

    Edward


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年8月4日 3:02
    版主
  • 谢谢您!按照您的方法,还是可以给任意域名访问。

    我已经把 ajax wcf 发布在云主机的IIS上了,用浏览器打开 http://ajaxwcf_ip/Service1.svc ,还是可以访问的。

    后来,添加以下配置,还是可以访问。我的本意,应该是 百度 或163的公网IP,才可以访问的我wcf程序,而不能任意IP来访问。

      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Allow-Origin: http://baidu.com http://www.163.com"/>
          </customHeaders>
        </httpProtocol>
      </system.webServer>


    • 已编辑 fss199 2017年8月5日 0:44
    2017年8月5日 0:41
  • Hi fss,

    >>百度 163的公网IP,才可以访问的我wcf程序,而不能任意IP来访问。

    限制公网IP是什么意思?

    看来你不是想要的跨域访问,而是通过IP限制可以访问服务的客户端。跨域访问是指,服务在A domain里面,而另一个web程序通过Ajax请求访问这个A 服务时受到的跨域访问的限制。你从浏览器直接打开Service1.svc并不会进行跨域访问。

    你可以通过IIS限制IP 访问。

    # How to IP restrict access to a website in IIS8,5 (Windows 2012R2)

    https://serverfault.com/questions/653672/how-to-ip-restrict-access-to-a-website-in-iis8-5-windows-2012r2

    Best Regards,

    Edward


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年8月7日 1:26
    版主
  • 谢谢您百忙之中抽空来解答!

    1、A 主机(独立的公网IP)的IIS 发布 wcf ajax enabled service。

    2、B 主机(独立的公网ip)的IIS 发布常规网站,js 有 调用 A 主机的 wcf ajax程序。

    3、那么 客户端,要打开 B 的域名,才能 访问 A 的 wcf ajax 程序。若通过 其他域名,来访问 A 主机的 wcf ajax 程序,则要拒绝掉。

    是不是wcf  开启了 AJAX ,就不能这样来实现?


    • 已编辑 fss199 2017年8月9日 22:42
    2017年8月9日 22:41
  • Hi fss,

    >>那么 客户端,要打开 B 的域名,才能 访问 A wcf ajax 程序

    你是不是想说的是,只能从部署在B主机的网站上访问WCF ajax程序?

    首先,我想确认下,现在B主机上的网站是不是可以访问A主机的程序,如果可以访问,是怎么配置实现的?根据我的理解,B主机的网站通过ajax访问A主机的程序会触发跨域问题, 我不确定你现在是否有这个问题,或者通过某种方式解决了这个问题。

    Best Regards,

    Edward


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年8月10日 1:33
    版主
  • 客户端,要打开 B 的域名,才能 访问 A  wcf ajax 程序,是这样的。

    只能从部署在B主机的网站上访问WCF ajax程序?是这样的。

    我是用vs2017,创建一个新的wcf ajax enabled service,没有再设置跨域。

    [OperationContract]
            [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
            string aaa(string str);

    2017年8月10日 12:29
  • Hi fss,

    在我这边只创建WCF Ajax Service并不能实现跨域请求。

    你是否可以创建一个可以重现你的问题的项目,包含了WCF Ajax服务和B主机的网站,我会尝试用你的项目去重新你的问题。

    Best Regards,

    Edward


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年8月11日 1:47
    版主