我有两个项目 - 一个在数据库上提供操作的WCF服务,以及一个运行AngularJS的ASP.NET项目,它充当服务的客户端。
我想将这些组合成一个项目。也就是说,在运行服务时,应该出现接口(ASP.NET AngularJS项目)。
我看到一些消息来源说AspNetCompatibilityMode可以用来做这样的事情,但我还没有看到如何实际指定客户端。
这是正确的方法吗?有更简单的方法吗?提前谢谢!
答案 0 :(得分:0)
有可能。我假设您要在ASP.NET Web窗体/ mvc(无论)类型的项目中公开现有的WCF服务。 步骤进行:
1)确保您的ASP.NET项目引用了WCF服务实现的程序集
2)将您的ASP.NET项目中的global.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,您希望构建RESTfull 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窗体/ MVC项目下托管它。
免责声明:这是非常天真的实施,在现实世界中你可能想要捕捉&记录服务中发生的异常,并以json的形式将它们返回给客户端。