2011-09-20 91 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身份驗證。 –

相關問題