WCF JSON和AspnetCompatibility的配置
在WCF Service Application中加入<enableWebScript>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="ajaxbehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="JsonWCF.StudentService">
<endpoint binding="webHttpBinding" contract="JsonWCF.IStudentService" behaviorConfiguration="ajaxbehavior" />
</service>
</services>
</system.serviceModel>
定义Contract,添加[WebGet] Attribute允许HTTP Get访问
[ServiceContract]
public interface IStudentService
{
[OperationContract]
[WebGet]
Student RandomStudent();
}
[DataContract]
public class Student
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public DateTime DOB { get; set; }
}
WCF可以以ASP.NET的方式host,这样就可以使用httpmodule httpcontext等一些asp.net特有的流程
在配置文件中添加
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
...
定义Module (Namespace = JsonWCF)
public class MyModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += context_BeginRequest;
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Application["key"] = "nothing is impossible";
}
}
web.config添加module
<system.web>
<httpModules>
<add name="mymodule" type="JsonWCF.MyModule"/>
...
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class StudentService : IStudentService
{
public Student RandomStudent()
{
string firstname = "null";
if (HttpContext.Current != null)
firstname = HttpContext.Current.Application["key"] as string;
return new Student { DOB = DateTime.Parse("1983/10/14"), FirstName = firstname, LastName = "Zhu" };
}
}
Remarks
如果将配置中的aspnetcompatibilityenabled改为false,wcf将不再走aspnet管道,application始终为空
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述