我有一个ASP.NET MVC 3应用程序,它在同一个项目中使用WCF服务。理想情况下,我想使用jQuery调用此服务。但是,我似乎无法绕过我正在做的事情。我还应该在配置中创建端点吗?现在我收到以下例外:
此服务的安全设置需要“匿名”身份验证,但不会为承载此服务的IIS应用程序启用此功能。
我可以为IIS启用匿名身份验证,但我更喜欢使用Windows。当我设置绑定配置时,由于没有端点,我不确定将配置添加到哪里。
答案 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();
如果您不需要进行任何自定义配置,这会减少配置;但是,只要您使用默认配置达到边界,您就需要返回使用已配置的端点,或者寻找以编程方式更新服务配置的方法。