我有一个像下面的方法这样的现有服务:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)] public class SomeService : ISomething { public SomeListResults SomeList(SomeParams someParams) { .... } }
有没有一种简单的方法可以同时允许JSONP调用和JSON(检测它)。这是本地人吗?
更新您的配置,如下所示:
<configuration> <system.web> <compilation debug="true" targetframework="4.0"> <authentication mode="None"> </authentication></compilation></system.web> <system.webserver> <modules runallmanagedmodulesforallrequests="true"> </modules></system.webserver> <system.servicemodel> <servicehostingenvironment **aspnetcompatibilityenabled**="true"> <standardendpoints> <webscriptendpoint> <standardendpoint **crossdomainscriptaccessenabled**="true" name=""> </standardendpoint></webscriptendpoint> </standardendpoints> </servicehostingenvironment></system.servicemodel> </configuration>
请参阅此处的博客文章,其中提供了创建可跨域访问的wcf服务的演练。
这将使您的服务能够接受来自跨域来源的请求。
在确定是否填充您的响应(jsonp中的p)方面,
感谢@carlosfigueira:
如果使用.Net 4,则JSONP本身受支持。只要请求具有称为“ callback”的查询字符串参数(可以配置此名称),则将使用函数名称填充响应。
否则,您将需要编写一个自定义消息检查器来适当填充响应。