jQuery JSONP使用的CrossDomain WCF返回undefined

时间:2013-01-27 16:52:11

标签: c# jquery wcf iis-7 jsonp

此示例表示Pranay Rana: http://www.codeproject.com/Articles/223572/Calling-Cross-Domain-WCF-service-using-Jquery-Java

有一个问题,它在这里失败,链接到实际的WCF: http://jsfiddle.net/TyrHW/

标记:

<%@ ServiceHost Language="C#" Debug="true" Service="WCF1.Service1" CodeBehind="Service1.svc.cs" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"%>

C#WCF服务

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;

namespace WCF1
{
        [DataContract]
        public class Customer
        {
            [DataMember]
            public string Name;

            [DataMember]
        public string Address;


        }


  [ServiceContract(Namespace = "JsonpAjaxService")]
  [AspNetCompatibilityRequirements(RequirementsMode =   AspNetCompatibilityRequirementsMode.Allowed)]

    public class Service1
    {
        [WebGet(ResponseFormat = WebMessageFormat.Json)]
        public Customer GetCustomer()
        {
            return new Customer() { Name = "Jacob Pines", Address = "999 S William St." };
        }
    }
    }

的web.config

<?xml version="1.0"?>
<configuration>

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

    </system.web>

    <system.serviceModel >
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
            <standardEndpoints>
                <webScriptEndpoint>
                        <standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
                </webScriptEndpoint>
            </standardEndpoints>


    </system.serviceModel>


    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>

    </system.webServer>

    <system.web>
        <customErrors mode="Off"/>
    </system.web>


</configuration>

我在本地获得与我的godaddy .net 4.0主机相同的结果。我检查了asp.net级别。 goddady的IIS安全性设置为匿名。如果我在浏览器中输入服务的URL,我会发现一些明显的身份验证问题,我已经发送给Godaddy。如果我在本地做同样的事情,我会得到健康的Web服务,但仍然从jsFiddle中得到未定义。

这对我来说都是新的......所以这是一项使命。 感谢。

1 个答案:

答案 0 :(得分:1)

来自following article

的引用
  

这在Cassini中运行时一切正常,但是当你想要的时候   在IIS中托管它,你需要注意两件事。首先,你会的   需要确保正确安装IIS和WCF   注册。如果IIS似乎不想咳你的SVC文件   (您可以通过尝试http:////AjaxService.svc来检查),尝试运行命令ServiceModelReg.exe / i   / x来自%WINDIR%\ Microsoft.NET \ Framework \ v3.0 \ Windows Communication   基础。运行此命令后重新启动IIS。第二,如果你   创建了一个默认的ASP.NET 2.0网站,您可能会遇到此错误   消息:

     

IIS specified authentication schemes 'IntegratedWindowsAuthentication, Anonymous', but the binding only supports specification of exactly one authentication scheme. Valid authentication schemes are Digest, Negotiate, NTLM, Basic, or Anonymous. Change the IIS settings so that only a single authentication scheme is used.

     

要解决此问题,请右键单击该网站   您的IIS管理器并选择“属性”。然后单击“目录”   选项卡,单击“匿名访问和”中的“编辑”按钮   身份验证控制“区域。您将看到匿名访问   和集成Windows身份验证已选中。取消选择其中一个   他们,然后重新启动IIS。之后,应用程序应该工作   顺利进行。

在您的情况下,使用基本身份验证替换集成Windows身份验证。