使用AspNetCompatibility从WCF服务运行客户端项目

本文关键字:运行 客户端 项目 服务 WCF AspNetCompatibility 使用 | 更新日期: 2023-09-27 18:19:20

我有两个项目——一个是提供数据库操作的WCF服务,另一个是ASP。. NET项目运行AngularJS,作为服务的客户端。

我想把这些合并成一个项目。也就是说,在运行服务时,接口(ASP。. NET AngularJS项目)应该出现。

我看到一些消息来源说AspNetCompatibilityMode可以用来做这样的事情,但我还没有看到任何地方如何实际指定客户端。

这是做这件事的正确方法吗?有更简单的方法吗?提前感谢!

使用AspNetCompatibility从WCF服务运行客户端项目

这是可能的。我假设您希望在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的形式返回给客户端。

相关文章: