带wcf的jsonp与vs.net服务器兼容,但不适用于IIS

时间:2011-10-26 12:17:35

标签: wcf iis jsonp

这让我疯了。我有一个输出jsonp的.net 4,wcf服务。它使用内置的web服务器与vs.net工作,但如果我尝试在Windows 7 64bit上的iis7中主机,我没有得到任何响应。

如果我尝试在iis7中托管时导航到svc文件,我会

“此服务的安全设置需要'匿名'身份验证,但不会为承载此服务的IIS应用程序启用。”

如果尝试通过客户端jquery jsonp请求访问我没有得到iis7中托管的服务的任何响应

因此,当在vs.net Web服务器中托管时,服务(web.config)的配置很好(只是不能与iis一起使用)

这是配置

   <system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webHttpBehavior">
        <webHttp />
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <bindings>
    <webHttpBinding>
      <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
    </webHttpBinding>
  </bindings>
  <services>
    <service name="ServiceSite.CustomersService">
      <endpoint address="" binding="webHttpBinding"
                bindingConfiguration="webHttpBindingWithJsonP" contract="ServiceSite.CustomersService"
                behaviorConfiguration="webHttpBehavior"/>
    </service>
  </services>
</system.serviceModel>

<system.web>
    <compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

该网站必须是ntlm / windows安全的。 我将以下内容添加到web.config绑定部分

            <security mode="TransportCredentialOnly">
          <transport clientCredentialType="Ntlm"/>
        </security>

在浏览svc文件时,我现在获得了经过身份验证的服务不支持跨域javascript回调 真?是不是支持这个真正的jsonp?

2 个答案:

答案 0 :(得分:0)

这可能是网站配置错误的症状。转到IIS管理器上的网站身份验证功能,并确保已设置。

Sample

答案 1 :(得分:0)

我非常确定,因为JSONP跨域如何解决当今的缺点,您必须始终实施自己的自定义安全系统。

我使用SSL和HMAC安全性进行JSONP跨域身份验证。我自己在服务上进行身份验证。

在执行JSONP时,您无法在请求上设置标头或任何内容,因为它是通过添加标签而不是实际的XMLHTTP请求对象来完成的。