使用AspNetCompatibility从WCF服务运行客户端项目
本文关键字:运行 客户端 项目 服务 WCF AspNetCompatibility 使用 | 更新日期: 2023-09-27 18:19:20
我有两个项目——一个是提供数据库操作的WCF服务,另一个是ASP。. NET项目运行AngularJS,作为服务的客户端。
我想把这些合并成一个项目。也就是说,在运行服务时,接口(ASP。. NET AngularJS项目)应该出现。
我看到一些消息来源说AspNetCompatibilityMode可以用来做这样的事情,但我还没有看到任何地方如何实际指定客户端。
这是做这件事的正确方法吗?有更简单的方法吗?提前感谢!
这是可能的。我假设您希望在ASP中公开现有的WCF服务。. NET web forms/mvc(无论什么)类型的项目。步骤:
1)确保你的ASP。. NET项目引用WCF服务实现在其中的程序集
2)改变你的ASP。. NET项目的全局。asax:
using System.ServiceModel.Activation; // from assembly System.ServiceModel.Web
protected void Application_Start(Object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
void RegisterRoutes(RouteCollection routes)
{
routes.Add(new ServiceRoute("Services/Angular", new WebServiceHostFactory(), typeof(WCFNamespace.AngularService)));
}
这注册了以/Service/Angular前缀开始的调用,这些调用将由你的WCF服务处理。
3)你的WCF服务应该是这样的
[ServiceContract]
public interface IAngularService
{
[OperationContract]
[WebGet(UriTemplate = "/Hello", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
[Description("Returns hello world json object")]
HelloWorld GetHello();
}
[DataContract]
public class HelloWorld
{
[DataMember]
public string Message { get; set; }
}
注意这些方法——它们应该用[WebGet]
或[WebInvoke]
方法装饰,因为在Angular中你想要构建restful wcf服务。序列化/反序列化格式也设置为json。
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
public class AngularService : IAngularService
{
public HelloWorld GetHello()
{
return new HelloWorld { Message = "Hello from WCF. Time is: " +
DateTime.Now.ToString() };
}
}
现在,如果你在浏览器中输入/Services/Angular/Hello,你应该就能得到json对象了。
最后,正如你所注意到的,WCF契约实现(在这种情况下,类AngularService)必须标记属性[AspNetCompatibilityRequirements]
,以便IIS可以在ASP下托管它。. NET web forms/MVC项目。
免责声明:这是一个非常幼稚的实现,在现实世界中你可能想要捕获&记录服务中发生的异常,并以json的形式返回给客户端。