這是我第一次嘗試使用WCF,所以這種方法可能有些根本錯誤 - 如果是這樣的話,我很樂意切換到另一種模式。乍一看,我認爲this question的答案可以奏效,但我的情況似乎有所不同。爲什麼在IIS中託管的WCF Web服務會隨機停止響應?
我有一個ASP.NET MVC網站,控制器通過中間存儲庫訪問WCF客戶端類。該存儲庫只是WCF客戶端的一個包裝器,它將其實例化一次並設置適當的端點地址。
public class WcfRepository : IRepository
{
private MyWCFServiceClient client;
public WcfRepository()
{
client = new MyWCFServiceClient();
}
public bool MyMethod1()
{
return client.MyMethod1();
}
... etc
}
我可以訪問網站上的不同頁面,直到WCF服務開始超時的看似隨機的點。我調用哪種方法並不重要 - 它在不同的方法上超時。我在託管WCF服務的IIS計算機上也看不到任何異常;事件日誌有空。一個簡單的方法,如GetCustomerByName()
兩分鐘之前的工作將不再,所以我認爲它更多的是與WCF通信,而不是服務本身。
如果我嘗試在發生這些超時之一時使用WCF測試客戶端,它也會失敗。但是,如果我等一會兒(並選擇'開始一個新的代理'),那麼事情會再次起作用。
我很困惑 - 我應該創建一個新的WCF客戶端實例,每次我想在我的資源庫中使用它?我應該使用客戶端的另一種方式嗎?由於第一次致電Close()
將對象置於處置狀態,因此將Open()/Close()
中的每個呼叫包裝都不起作用。
我懷疑它是WCF - 更可能的是,它是IIS和ASP.NET應用程序池阻止你的通信。 IIS託管WCF是一個.....次優解決方案 - 我總是託管WCF服務在我自己的NT服務或控制檯應用程序。 –
我有點困惑。您的MVC應用程序是否使用託管在另一個IIS實例中的WCF服務? –
marc_s你有任何關於爲什麼在IIS中託管WCF的更多信息不理想嗎?我們必須在客戶端部署此服務,讓他們同意的最簡單方法似乎是在IIS中託管。 – Jedidja