2010-11-18 43 views
1

UPDATE:的Response.Write JSONP使用jQuery和WCF

该服务无法启动,因为它不支持ASP.NET兼容性。此应用程序启用了ASP.NET兼容性。关闭web.config中的ASP.NET兼容模式,或将AspNetCompatibilityRequirements属性添加到R​​equirementsMode设置为“允许”或“必需”的服务类型。

当我尝试访问wcf服务时,我得到这个错误:原因是HttpContext.Current为空,我应该怎么做在这种情况下?任何帮助?

未将对象引用设置为对象的实例。

System.Web.Script.Serialization.JavaScriptSerializer s = new   System.Web.Script.Serialization.JavaScriptSerializer(); 
     Person p = new Person() { FirstName = "First name", LastName= "last name" }; 
     string json = s.Serialize(p); 
     System.Web.HttpContext.Current.Response.Write("jsoncallback" + json);} //error 
+0

您确定已经声明式地添加了它。这个错误很明显。它看起来好像您尝试访问您的服务时未启用该服务的ASP.Net兼容模式。 – Josh 2010-11-18 19:13:35

+0

我做了,我仔细检查... – 2010-11-18 19:15:43

+0

好的,所以...几个问题。 1.)您的WCF服务是否托管在IIS中? 2.)您是否在您的服务实施或合同上签了声明? – Josh 2010-11-18 19:27:06

回答

0

HttpContext是一个ASP.Net构建体。如果你想在你的服务中访问它,那么你需要启用ASP.Net Compatibility为您的服务。

无论是通过在web.config:

<system.serviceModel> 
     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

或者声明:

[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Required)] 
public class MyService : IMyService { ... } 
+0

我尝试添加通过web.config和delcaratively,但我得到这个错误:我更新我的问题。 – 2010-11-18 19:09:43

+0

你必须在web.config和服务中做到这一点。如果他们不匹配它的错误。 – BradLaney 2011-11-04 17:33:23

0

如果简单地回答写是你的东西,那么可以考虑使用一个简单的HttpHandler(通过实现IHttpHandler接口)。 Response对象并不意味着在WCF服务中使用...如果WCF对你而言(或许它提供的技术堆栈是你需要的),那么考虑使用已经存在的plumming来输出json:

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    [WebGet(ResponseFormat = WebMessageFormat.**Json**)] 
    String DoStuff(); 

} 
+0

符文:我正在跨域这就是为什么我试图简单地流数据... – 2010-11-18 21:52:08

+0

简单的HttpHandler和WCF方法都涵盖了跨域场景。 实际上唯一没有(没有调整)的是RIA服务和MVC JsonResult。 – 2010-11-19 08:10:44