我有一個在同一個項目中使用WCF服務的ASP.NET MVC 3應用程序。理想情況下,我想用jQuery來調用這個服務。但是,我似乎無法把我的頭圍繞在我正在做的事情上。我還應該在配置中創建一個端點嗎?目前,我收到以下例外情況:是否可以從同一個項目中使用WCF服務?
此服務的安全設置需要「匿名」身份驗證,但未啓用承載此服務的IIS應用程序。
我可以爲IIS啓用匿名身份驗證,但我更喜歡使用Windows。當我設置綁定配置時,由於沒有端點,我不確定將該配置添加到哪裏。
我有一個在同一個項目中使用WCF服務的ASP.NET MVC 3應用程序。理想情況下,我想用jQuery來調用這個服務。但是,我似乎無法把我的頭圍繞在我正在做的事情上。我還應該在配置中創建一個端點嗎?目前,我收到以下例外情況:是否可以從同一個項目中使用WCF服務?
此服務的安全設置需要「匿名」身份驗證,但未啓用承載此服務的IIS應用程序。
我可以爲IIS啓用匿名身份驗證,但我更喜歡使用Windows。當我設置綁定配置時,由於沒有端點,我不確定將該配置添加到哪裏。
如果你希望能夠達到您的WCF服務,你通常需要安裝一個端點。另一種方法是承載您的服務「進程內」使用InProcFactory
CLAS,這是需要下載它從朱瓦爾·洛的ServiceModelEx
庫可從the downloads page of his website(註冊後,只需搜索「ServiceModelEx」,並點擊鏈接)。該方法如下所示:
IMyService proxy = InProcFactory.CreateInstance<MyServiceClass, IMyService>();
proxy.MyMethod();
如果您不需要執行任何自定義配置,則會減少配置;但是,只要您使用默認配置進入邊界,您就需要返回使用配置的端點,或尋找一種以編程方式更新服務配置的方法。
你需要一個終點,但是與所有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>
他想從AJAX訪問服務的任何區別? –
謝謝約翰,我偏離了這個問題的一部分。我相信在同一個項目中使用Javascript訪問WCF服務應該和從其他位置使用Javascript一樣工作,但我不知道從jQuery使用Windows身份驗證。 –
如果Web應用程序設置爲具有Windows身份驗證,則應通過Windows身份驗證。 –