是否可以从同一个项目中使用WCF服务?

时间:2011-09-20 20:55:37

标签: asp.net-mvc wcf asp.net-mvc-3 iis-7 wcf-binding

我有一个ASP.NET MVC 3应用程序,它在同一个项目中使用WCF服务。理想情况下,我想使用jQuery调用此服务。但是,我似乎无法绕过我正在做的事情。我还应该在配置中创建端点吗?现在我收到以下例外:

  

此服务的安全设置需要“匿名”身份验证,但不会为承载此服务的IIS应用程序启用此功能。

我可以为IIS启用匿名身份验证,但我更喜欢使用Windows。当我设置绑定配置时,由于没有端点,我不确定将配置添加到哪里。

2 个答案:

答案 0 :(得分:2)

您需要一个端点,但与所有WCF端点一样,它不一定需要在配置文件中定义 - 您可以在代码中自由定义它。

由于您已经在Web项目中,因此最简单的解决方案是在IIS中托管WCF服务。使用配置文件非常容易,而在.NET 4中,大多数配置都是默认的(比3.5简单得多)

定义服务后,您需要实例化频道或客户端。您可以使用svcutil工具生成代理(使用“添加新服务参考...”向导),或者只创建ChannelFactory

var factory = new ChannelFactory<MyService>(typeof(MyService).FullName);
MyService channel = factory.CreateChannel();

// use the channel as you would a normal instance of the class
var result = channel.MyOperation("hello world");

同样,此模式将从web.config文件中检索配置。因为您的项目既是服务又是客户端,因此您需要这两个部分。这不是一个完整的配置,但应该给你一个想法...

<system.serviceModel>
  <services>
    <service name="MyProject.MyService">
      <endpoint binding="basicHttpBinding" 
                contract="MyProject.IMyService" />
    </service>
  </services>
  <client>
    <endpoint name="MyProject.MyService" 
              address="http://localhost" 
              binding="basicHttpBinding" 
              contract="MyProject.IMyService" />
  </client>    
</system.serviceModel>

答案 1 :(得分:1)

如果您希望能够访问WCF服务,通常需要设置端点。另一种方法是使用InProcFactory clas托管您的服务“In-Proc”,这是来自the downloads page of his website的JuvalLöwy的ServiceModelEx库的一部分(需要注册才能下载它,只需搜索“ServiceModelEx”并单击链接)。这种方法看起来像:

IMyService proxy = InProcFactory.CreateInstance<MyServiceClass, IMyService>();
proxy.MyMethod();

如果您不需要进行任何自定义配置,这会减少配置;但是,只要您使用默认配置达到边界,您就需要返回使用已配置的端点,或者寻找以编程方式更新服务配置的方法。