在 WCF Restful 服务中访问属性“应用”的权限被拒绝

Posted

技术标签:

【中文标题】在 WCF Restful 服务中访问属性“应用”的权限被拒绝【英文标题】:Permission denied to access property "apply" in WCF Restfull services 【发布时间】:2015-12-26 10:46:54 【问题描述】:

在我的解决方案文件中,我添加了两个项目,一个是 WCFService 应用程序,另一个是空的 MVC 应用程序。

在 WCF 服务中。

public interface IProductService
    
         [OperationContract]
         [WebInvoke(Method = "GET", UriTemplate = "/ProductName/productID",
            BodyStyle = WebMessageBodyStyle.Bare, 
            RequestFormat = WebMessageFormat.Json, 
            ResponseFormat = WebMessageFormat.Json)]
         string GetProductName(string productID);
     

WCF 配置文件如下

<system.serviceModel>
    <services>
      <service behaviorConfiguration="Default"
               name="RESTFulWCFService.ProductService">
        <endpoint address="" behaviorConfiguration="webBehavior"
                  binding="webHttpBinding" contract="RESTFulWCFService.IProductService"></endpoint>
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex"></endpoint>
      </service>
    </services>

    <behaviors>
      <endpointBehaviors>
        <behavior name="webBehavior">
          <webHttp helpEnabled="true"/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="Default">
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>        
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="*" />
        <add name="Access-Control-Allow-Headers" value="*" />
      </customHeaders>
    </httpProtocol>
    <directoryBrowse enabled="true"/>
  </system.webServer>

现在,当我使用 jquery 调用 WCF 时,在浏览器控制台中出现此错误。

**Error: Permission denied to access property "apply"**

我的 Jquery 代码

<script>
    $(document).ready(function () 
        $.ajax(
            type: "GET",
            url: "http://localhost:55827/ProductService.svc/ProductName/2",
            contentType: "application/json; charset=utf-8",
            dataType: "jsonp",
            success: function (result) 
                debugger;
                alert(result.d);
                console.log(result);
            ,
            error: function (result) 
                debugger;
                alert('no');
            
        );
    );
</script>

【问题讨论】:

为什么不在 MVC 项目中添加服务引用? 它是WCF restfull服务,那么为什么我需要在我的Web中引用WCF,什么时候可以使用ajax调用它。 【参考方案1】:

请将该属性添加到实现您的服务 IProductService 的类中

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

【讨论】:

谢谢它的工作。但是还有另一种方法可以解决这个问题。在 ajax 请求中添加 crossDomain: true,。它也可以工作 OK 如果它完全满足您的要求,然后标记并关闭问题,这将对其他导师和观众有所帮助。

以上是关于在 WCF Restful 服务中访问属性“应用”的权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

使用 WCF 客户端访问 RESTful 服务时访问 HTTP 状态代码

使用 WCF/RESTful 服务的 Android 应用程序

Restful WCF 无法达到 operationcontract

如何在 Restful WCF 服务中管理会话

来自网站客户端脚本的 WCF RESTful 服务跨域访问

Restful风格wcf调用3——Stream