2011-09-20 92 views
1

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

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

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

回答

1

如果你希望能够达到您的WCF服务,你通常需要安装一个端点。另一种方法是承载您的服务“进程内”使用InProcFactory CLAS,这是需要下载它从朱瓦尔·洛的ServiceModelEx库可从the downloads page of his website(注册后,只需搜索“ServiceModelEx”,并点击链接)。该方法如下所示:

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

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

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> 
+0

他想从AJAX访问服务的任何区别? –

+0

谢谢约翰,我偏离了这个问题的一部分。我相信在同一个项目中使用Javascript访问WCF服务应该和从其他位置使用Javascript一样工作,但我不知道从jQuery使用Windows身份验证。 –

+0

如果Web应用程序设置为具有Windows身份验证,则应通过Windows身份验证。 –

相关问题